Java - 方法忽略大写 -> 小写转换

Java - Method ignores Upper -> Lowercase tranformation

一个关于ASCII和java的问题: 我正在使用 java 读取文件,所有这些文件都包含大写字母,我应该将其转换为小写字母,以便用另一种算法处理它们,该算法查找从两个文件读取的序列之间的匹配项。 该算法包含这种比较:

 for(int j = 0; j < pattern.length(); ++j)
        {
            //char a has a certain decimal value, so whatever char subtracted to char a
            //will be an index between 0 and 25
            int c = pattern.charAt(j) - 'a';

读取文件的算法如下所示:

无论如何,每当我读取文件时,我都会收到由变量文本引起的错误,该文本应该只有小写字母。 此错误:ArrayIndexOutOfBoundsException caughtjava.lang.ArrayIndexOutOfBoundsException:索引 -87 超出长度 26

的范围

当我使用带有小写字母的预定义字符串时,一切正常,唯一的问题出现在我从文件中读取文本时。

在java中还有其他方法可以将大写字母转换为小写字母吗?

如能指出我的错误,将不胜感激。

非常感谢您!

来自异常的消息是 java.lang.ArrayIndexOutOfBoundsException: Index -87

这意味着表达式 pattern.charAt(j) - 'a' 产生值 -87,这反过来意味着 pattern.charAt(j) 必须具有值 10,即 '\n' 的值 - 行分隔符.

您的文本文件似乎不仅包含字母字符,而且至少包含一个行分隔符。

有一些可能的解决方案:

  • trim() 您从文件中读取的文本:

    text = new String(Files.readAllBytes(path)).toLowerCase().trim();
    
  • 跳过算法中不在 'a' 到 'z' 范围内的所有内容:

    int c = pattern.charAt(j) - 'a';
    if (c < 0 || c > 25) continue;