1

我正在逐行读取文件,然后我想检查该字符串是否包含另一个字符串,所以我使用String.contains方法,但它总是返回 false。

我试图拆分输入行(然后使用String.containsor String.equals),因为要检查的单词是该行的第一个。

我要检查的字符串是<now>在进行拆分时,我注意到即使该行包含它,我也会得到错误。

奇怪的事实是字符串打印正确,但它的长度大于字符串<now>(即使我使用替换来确保没有空格),我想这是我的问题。我认为这取决于文件的编码,但如果是这样,有什么解决方案吗?

该文件是另一个程序(Praat)的输出,所以我无法以其他方式保存它。

line = inFile2.nextLine();
String[] w = line.split("[\t\\s]");
String checking = w[0];
checking.replace(" ","");
checking.replace("/t","");
String st ="<now>";
System.out.println(!checking.equals(st)); //returns always true
System.out.println(st.length()); //returns 5
System.out.println(checking.length());  //returns 11
System.out.println(checking); //it prints <now> correctly

输入中的字符串如下:<now> 236 62 elena information-relation

4

4 回答 4

7

字符串是不可变的:

注意: String 类是不可变的,因此一旦创建 String 对象就无法更改。String 类有许多方法,其中一些将在下面讨论,它们似乎可以修改字符串。由于字符串是不可变的,这些方法真正做的是 创建并返回一个包含操作结果的新字符串

所以应该是:

Checking = Checking.replace(" ","");
Checking = Checking.replace("/t","");

甚至更好(方法链接):

Checking = Checking.replace(" ","").replace("/t","");

还请尊重命名约定

于 2013-11-14T12:23:05.370 回答
0

字符串是不可变的,因此您需要分配。

Checking = Checking.replace(" ","");
Checking = Checking.replace("/t","");
于 2013-11-14T12:24:38.510 回答
0

为了使它更短,你也可以这样做:

String Checking = W[0].replace(" ", "").replace("/t", "");

当然,这取决于您的喜好。

于 2013-11-14T12:27:51.287 回答
0

我解决了使用 UTF-8 编码重新保存文本文件的问题。

于 2013-11-14T15:44:57.137 回答