2011-08-31 74 views
0

我一直试图从几秒钟内从下面的字符串中删除度摄氏度符号。我查看了之前的帖子,我发现/ u2103是它的Unicode代表。尽管试图删除该字符串,但我仍然没有运气。这是我现在有:如何从字符串中删除摄氏度符号(java)

String temp = "Technology=Li-poly;Temperature=23.0 <degree symbol>C;Voltage=3835"; 
StringBuilder filtered = new StringBuilder(temp.length()); 
    for (int i = 0; i < temp.length(); i++) { 
char test = temp.charAt(i); 
if (test >= 0x20 && test <= 0x7e) { 
    filtered.append(test); 
} 
} 

temp = filtered.toString(); 

temp.replaceAll(" ", "%20"); 

结果字符串看起来是这样的: 技术=锂聚合物;温度= 23.0Ç;

我也试过

temp.replaceAll("\\u2103", ""); 
temp.replaceChar((char)0x2103, ' '); 

但这一切工作。

我目前的问题是过滤字符串的函数会留下一个空白区域,但调用replaceAll(“”,“%20”)似乎无法识别该特定空间。 ReplaceAll将用%20替换其他空格。

+0

你确定它是'\ u2103'而不是'\ u00B0'吗? – corsiKa

回答

4

这是一个问题:

temp.replaceAll(" ", "%20"); 

你打电话replaceAll但从来没有使用的结果。字符串是不可变的 - 任何方法看起来像它改变的内容其实是返回不同的字符串作为结果。你想:

temp = temp.replaceAll(" ", "%20"); 

话虽如此,但为什么你想在所有的替代空间,也没有什么错你得到的字符串目前尚不清楚。

您与其他temp.replaceAlltemp.replaceChar调用有相同的问题。

为你逃避反斜杠您试图直接替换的字符也将失败 - 你真的想:

temp = temp.replace("\u2103", ""); 

注意使用的replace代替replaceAll - 后者使用正则表达式,这有这里根本不需要使用。

+0

谢谢!这工作!我不需要双反斜杠,我应该使用替换,而不是replaceAll。 – user836200