Java substring方法:如何删除所有非字母数字字符?

时间:2013-08-06 11:43:43

标签: java substring

我想从此字符串中删除所有非字母数字字符,以及其他类型的字符串,例如

Unable_to_locate_element_{"method""link_text","selector""ikljbhfvdesiofsdjkl"}

因此我可以使用此字符串为此代码生成屏幕截图的名称:

    private String generateRandomFilename(Throwable arg0) {
      Calendar c = Calendar.getInstance();

      String filename = arg0.getMessage();
      int i = filename.indexOf('\n');
      filename = filename.substring(0, i).replaceAll("\\s", "_").replaceAll(":", "") + ".jpg";
      filename = "" + c.get(Calendar.YEAR) + 
          "-" + c.get(Calendar.MONTH) + 
          "-" + c.get(Calendar.DAY_OF_MONTH) +
          "-" + c.get(Calendar.HOUR_OF_DAY) +
          "-" + c.get(Calendar.MINUTE) +
          "-" + c.get(Calendar.SECOND) +
          "-" + filename;

      return filename;
  }

现在的样子,我的文件创建因为并没有删除所有坏字符而中断。

5 个答案:

答案 0 :(得分:2)

试试这个

str = str.replaceAll("\\P{Alnum}", "");

答案 1 :(得分:1)

你可以试试这个

  str = str.replaceAll("[^a-zA-Z0-9\\s]", "");

答案 2 :(得分:1)

str = str.replaceAll("\\W", "");

答案 3 :(得分:1)

另一种方法,如果您不想使用regex

    String str = "something : but / nothing@*/132456+";
    StringBuilder sb = new StringBuilder();        
    for (int i = 0; i < str.length(); i++) {
        if(Character.isLetterOrDigit(str.charAt(i))){
            sb.append(str.charAt(i));
        }
    }
    System.out.println(sb.toString());

显示somethingbutnothing132456

答案 4 :(得分:0)

使用:

String str = str.replaceAll("[^A-Za-z0-9]", "");
System.out.println(str);