无法替换String java

时间:2016-10-09 16:53:21

标签: java replaceall

有点奇怪,因为我已多次检查过,但我仍然看不出有什么问题。

无论如何,我有一个名为score的字符串,它是一个方法参数。输入是"0 - 2",我想解析这个字符串,但在我必须删除空格之前。我尝试过使用score = score.replaceAll("\\s+", "")score = score.replace(" ", ""),但仍然没有替换空格。在这行代码下面,我打印出分数,它仍然显示字符串为"0 - 2",空格未删除。任何帮助将不胜感激。

以下是方法的代码

public static int parseScore(String score, boolean first){

    score = score.replaceAll("\\s+",""); // remove white space
    System.out.println(score);

    String[] tokens = score.split("-");

    if(first == true){

        return Integer.parseInt(tokens[0]);

    }else{

        return Integer.parseInt(tokens[1]);

    }

}

错误:

线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“0”     at java.lang.NumberFormatException.forInputString(Unknown Source)     在java.lang.Integer.parseInt(未知来源)     在java.lang.Integer.parseInt(未知来源)     在PredictResult2.parseScore(PredictResult2.java:32)     在PredictResult2.main(PredictResult2.java:102)

编辑:

忘记提及我正在使用的字符串已经从下载的html页面解析过。这与它有什么关系吗?也许不同的字符格式或什么?

4 个答案:

答案 0 :(得分:1)

你的代码非常好。当我测试它时它工作得很好,所以不是这样。这肯定是其他一些奇怪的问题。

但无论如何,对于你想要实现的目标,trim()可能更有效,更快。

    public static int parseScore(String score, boolean first){
    String[] tokens = score.split("-");
    if(first == true){
        return Integer.parseInt(tokens[0].trim());
    }else{
        return Integer.parseInt(tokens[1].trim());

    }
}

答案 1 :(得分:0)

您的输入必定是错误的。你的代码运作良好 - 检查这段代码:

public static void parseScore(){

    String score = "0 - 2";
    score = score.replaceAll("\\s+","");

    System.out.println(score);

    String[] tokens = score.split("-");

    System.out.println(tokens[0]);
    System.out.println(tokens[1]);


    System.out.println(Integer.parseInt(tokens[0]));
    System.out.println(Integer.parseInt(tokens[1]));
}

public static void main(String[] args) {
    parseScore();
}

如果您不确定输入,我建议将字符串转换为char数组并打印每个字符的ASCII代码。然后将输出与表here进行比较。

char[] array = score.toCharArray();
    for (char c : array)
        System.out.print((int)c + " ");

答案 2 :(得分:0)

似乎是处理不间断空格的情况。前一段时间偶然发现了这些,并给自己写了以下的util方法。更多信息请见:

Why is non-breaking space not a whitespace character in java?

https://en.wikipedia.org/wiki/Non-breaking_space

/**
 * Trims non-breaking whitespace, too.
 */
public static String trim(String value) {
    return value.replaceAll("[\\s\\u00A0]+$", "");
}

答案 3 :(得分:-1)

如果您考虑使用番石榴,那么就可以这样做

Splitter.on("-").trimResults().omitEmptyStrings().split(score);

了解更多信息https://github.com/google/guava/wiki/StringsExplained