字符串= string.replace(“”,“”)是否不删除尾部空格?

时间:2019-08-29 07:58:40

标签: java android

我今天在项目中遇到了一个错误,该错误中String的尾部空格未替换为

string = string.replace(" ", "") 

,我不得不修剪字符串以摆脱它。

中间的空格已按预期替换。这使我相信

string.replace(" ", "")

在尾部空格上不起作用。那是正确的吗?如果是,那有什么意义呢?还有没有更干净的方法可以做到这一点?

// example for value would be "100,0€ "
value = value.replace(" ", "").replace(",", ".").replace("€", "");
Log.d(TAG, value);
// Logcat: "D/BudgetEditFragment: 100.0 "
mBudget.setAmount(new BigDecimal(value)); //Bug crash caused with space in value

还:

value.getBytes()

在替换之前包含字节:值“ 100,0”的{49、48、48、44、48、32} 替换后包含以下字节:{49,48,48,46,48,32}的值为“ 100.0”

向@GauravMall和@ScaryWombat呐喊,就像我一样迷恋于这无意义的代码!

3 个答案:

答案 0 :(得分:4)

不,它确实:

    String withSpace = "this is a test ";
    System.out.print(withSpace.replace(" ", ""));
    System.out.println("|");

输出:

thisisatest|

或考虑使用正则表达式:

withSpace.replaceAll("\\s", "")

答案 1 :(得分:1)

作为@ScaryWombat的答案(您发布的编辑)的后续,我测试了代码:

String value = "35,00€ ";
value = value.replace(" ", "").replace(",", ".").replace("€", "");
BigDecimal bigDecimal = new BigDecimal(value); 
System.out.println(bigDecimal);

输出:

35.00

也许错误并非与定义BigDecimal有关。检查您的mBudget类,并进行十六进制转储以检查特殊字符。

编辑:信息转储

因此,欧元符号(这个东西:)具有字节数组输出:

[-30, -126, -84]

在空间(此事物)中,有字节数组输出:

[32]

使用OP的功能时,这是字节数组的输出,前后:

Before: [49, 48, 48, 44, 48, 48, -30, -126, -84, 32]
After:  [49, 48, 48, 46, 48, 48]

很明显,44(逗号)更改为46(句号),因此,已更改为.。此外,由于-30,所有来自欧元符号的-126-84replace() function也被删除。另外,32也已删除,因为空间已删除。

然而,从OP的编辑中可以明显看出,replace()函数并未删除32(空格)。这是OP的测试:

After: [49, 48, 48, 46, 48, 32]

我的推理:我能找到的唯一原因是,replace()函数在您使用Android时因您而异。如果您尚未明确定义任何内容,则说明您在Android中使用Java 7。我在Android上进行了测试,但我使用的是Java8。在原始Java测试中,我也是如此。因此,也许这是Java 7与Java 8之间的差异。

答案 2 :(得分:-1)

您可以替换尾部空格:

string.trim();