无法替换字符串java中的空格
这有点奇怪,因为我已经检查了好几次了,仍然看不出我所做的有任何错误 无论如何,我有一个名为score的字符串,它是一个方法参数。输入是<代码>“0 - 2”< /代码>,我想解析这个字符串,但在我必须删除空白之前。我曾尝试使用<代码>得分=分数。RePATALL(“\s+”,“”“”< /> >和<代码>得分=得分。替换(“”,“”)< /> >但是空白空间仍然没有被替换。在这行代码下面,我打印出了分数,它仍然将字符串显示为无法替换字符串java中的空格,java,replaceall,Java,Replaceall,这有点奇怪,因为我已经检查了好几次了,仍然看不出我所做的有任何错误 无论如何,我有一个名为score的字符串,它是一个方法参数。输入是“0 - 2”< /代码>,我想解析这个字符串,但在我必须删除空白之前。我曾尝试使用得分=分数。RePATALL(“\s+”,“”“”< /> >和得分=得分。替换(“”,“”)< /> >但是空白空间仍然没有被替换。在这行代码下面,我打印出了分数,它仍然将字符串显示为“0-2”,空格没有删除。任何帮助都将不胜感激 下面是该方法的代码 public static
“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”
位于java.lang.NumberFormatException.forInputString(未知源)
位于java.lang.Integer.parseInt(未知源)
位于java.lang.Integer.parseInt(未知源)
在PredictResult2.parseScore(PredictResult2.java:32)
在PredictResult2.main(PredictResult2.java:102)
编辑:
忘了提到我正在使用的字符串已经从下载的html页面中解析出来了。这跟这事有关系吗?可能是不同的字符格式或其他什么?您的输入一定是错误的。您的代码运行良好-请检查以下代码:
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();
}
如果您对输入不确定,我建议将字符串转换为字符数组并打印每个字符的ASCII码。然后将输出与表进行比较
你的代码非常好。当我测试它时,它工作得很好,所以不是这样。这一定是另一个奇怪的问题 但是无论如何,对于您想要实现的目标,
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());
}
}
似乎是一个处理不间断空间的案例。不久前我偶然发现了这些,并为自己编写了以下util方法。更多信息可在此处找到:
你有没有在调试器中仔细检查代码,看看每一行都发生了什么?System.out.println(score)返回“0-2”。因此,当执行行return Integer.parseInt(tokens[0])时,它返回NumberFormatException。我将在实际错误中编辑嗨,谢谢!是的,我想可能是这样。如果你看一下我刚刚在文章中所做的编辑,我相信这可能与我从网上撕下的html页面中的一些不寻常的字符格式有关。0-2是输入。或者至少这是我从println函数的输出中复制的内容。我会试试角色数组的东西,然后再给你回复,谢谢!下面是char数组的输出:481604516050。哦,好的,所以空间实际上被格式化为“á”。那么我应该试着替换那个字符吗?是的,你应该从字符串中删除这个奇怪的字母。试试这个:
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());
}
}
/**
* Trims non-breaking whitespace, too.
*/
public static String trim(String value) {
return value.replaceAll("[\\s\\u00A0]+$", "");
}