我今天在项目中遇到了一个错误,该错误中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呐喊,就像我一样迷恋于这无意义的代码!
答案 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
,-84
,replace() 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();