-2

我需要一些帮助来解决这个问题——Java 的 startsWith() 方法似乎不起作用。

有人知道为什么会这样吗?

方法:

public boolean check(File f) {
    boolean ans = (f.getName().startsWith(this.pre));
    System.out.println(f.getName()+"     "+this.pre);
    System.out.println(ans);
}

我得到的输出是:

file5.b     file 
false
Same_a.txt     file 
false
same_name_a.txt     file 
false
same_name_c.txt     file 
false

看起来它总是返回错误。

编辑:你是对的,我误解了一些事情......感谢和抱歉给您带来的不便。

4

2 回答 2

0

Try this:

public boolean check(File f) {
   return f.getName().replaceAll("\\s+","").startsWith(this.pre.replaceAll("\\s+",""));
}

This will remove all whitespaces from f.getName() and this.pre and then compare them (without the whitespace).

There may also be an issue with case-sensitivity, so you make want to lowercase all your chars with .toLowerCase().

于 2014-05-29T01:23:53.280 回答
0

Java 的 startsWith() 方法似乎不起作用。

我必须告诉你该startWith()方法确实有效。它被(我猜)数以百万计的 Java 程序员/程序使用。该方法中出现真正错误的可能性非常小。您应该假设问题出在您的代码中......除非您有无懈可击的证据证明它不是。

如果像这样的库方法似乎不起作用,那是因为您没有正确使用它,或者因为它实际上 >>is<< 起作用并且您的输入存在您没有考虑的问题。

我看不出你使用它的方式有什么问题,所以可能的解释是输入有问题。

  • 最有可能的解释是pre有您没有注意到的前导或尾随空白字符。在表达式中的字符串周围加上引号println是发现这一点的简单方法。

  • 另一种可能性是“同形文字”。不知何故,name字符串或pre字符串包含的字符在显示时看起来相同,但实际上是不同的 Unicode 代码点。例如,“Latin C”和“Cyrillic C”在您的屏幕上很可能看起来相同......但代码点不同并且会比较不同。

    如果您遇到此问题,使用调试器可能是最简单的方法。即设置断点并单步执行startsWith调用以查看正在使用的字符

于 2014-05-29T01:58:55.800 回答