无论如何,我有一个名为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页面解析过。这与它有什么关系吗?也许不同的字符格式或什么?
答案 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);