拆分字符串会出现越界异常

Splitting String gives an out of bounds exception

我需要去掉句子 (str) 中的所有标点符号,但是当我拆分字符串并尝试检查每个索引时它会抛出异常

String str = "RT @GHCheer2015: Freshman & Sophomores: Interested in cheer at GH? Email: jackemersoncheer@gmail.com";
      String punct = ",./;:'\"?<>[]{}|`~!@#$%^&*()";
      String finaltext = "";
      System.out.println(str);
      String[] arr3 = str.split("");
      for(int k = 0; k < arr3.length; k++){
         for(int i = 0; i < punct.length(); i++){
            if((arr3[k].charAt(k)+"") != (punct.charAt(i)+""))
               finaltext += arr[k].charAt(k) + "";
         }
      }

我收到以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
    at java.lang.String.charAt(String.java:658)
    at StringMethods.main(StringMethods.java:109)

问题是 arr3[k].charAt(k)。 arr3[k] 为您提供单个字符串,因此索引只能为 0。当您发现索引 >0(在本例中为 k>0)时,它将抛出 StringIndexOutOfBoundsException。 相反,您可以使用字符串包含方法来找到问题的解决方案。

        String punct = ",./;:'\"?<>[]{}|`~!@#$%^&*()";
        String finaltext = "";
        System.out.println(str);
        String[] arr3 = str.split("");
        for (int k = 0; k < arr3.length; k++) {
            if (!punct.contains(arr3[k])) {
                finaltext += arr3[k] + "";
            }
        }
    }

如果要删除所有标点符号,您可以简单地这样做:

str.replaceAll("[^a-zA-Z 0-9]", "").replaceAll("\s+", " ").trim();

@DevilsHnd 在评论中指出了同样的问题

好的,试试这个,

优化方案:)

public static void main(String args[]) 
{

    String str = "RT @GHCheer2015: Freshman & Sophomores: Interested in cheer at GH? Email: jackemersoncheer@gmail.com";
      String punct = ",./;:'\"?<>[]{}|`~!@#$%^&*()";
      System.out.println(str);

      String[] punctArr = punct.split("");

         for(int i = 0; i < punctArr.length; i++){
             str = str.replace(punctArr[i], "");
         }

      System.out.println("Final string \n :" + str);
}