【问题标题】:Java startsWith doesn't seem to work [closed]Java startsWith 似乎不起作用[关闭]
【发布时间】:2014-05-29 01:19:04
【问题描述】:

我需要一些帮助来解决这个问题 - 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

看起来它总是返回 false。

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

【问题讨论】:

  • pre 的值是多少?
  • 尝试在字符串输出周围添加单引号。我敢打赌,值周围有额外的空格。
  • 当我去编辑问题文本时,我注意到在您的输出行中,当您打印this.pre 时,“文件”一词后面总是有一个空格。你确定它的值是"file" 而不是"file "
  • 另外,要养成处理这些问题的习惯,并且要养成这样一种心态,即 99.99% 以上的错误将出现在您的代码中,而不是 Java 标准库中。将问题表述为标准库中的错误几乎是一种必然会被否决的方式。
  • 缺少诊断问题所需的最少信息。

标签: java startswith


【解决方案1】:

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

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

如果像这样的库方法似乎不起作用,那是因为您没有正确使用它,或者因为它实际上>>正在

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

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

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

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    这将从f.getName()this.pre 中删除所有空格,然后比较它们(不包括空格)。

    大小写敏感也可能存在问题,因此您希望将所有字符都小写为.toLowerCase()

    【讨论】:

    • 完成。仍然没有帮助:\
    • 那么你在其他地方有错误。几秒钟前我刚刚尝试过。请显示更多上下文,也许您的文件名中有一些不可见的字符。
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2023-03-27
    相关资源
    最近更新 更多