为什么我无法在数千人之前摆脱空白?
我已经编写了这样的方法来检查字符串是否可以解析为double:
编辑:好的,我已经更新了方法,因为每个人都写了相同的答案 - 这是不寻常的情况
public static boolean isNumber(String test) {
// remove whitespaces
System.out.print("Test is - " + test);
test = test.replaceAll("\\s", "");
// test = test.replaceAll("[ \\t]", "");
// test = test.replaceAll("\\s+", "");
// test = test.replaceAll(" ", "");
System.out.print(" - now test is - " + test);
// match pattern - numbers with decimal delimiter as dot or comma
String decimalPattern = "([0-9]*)(\\.|\\,)([0-9]*)";
boolean match = Pattern.matches(decimalPattern, test);
System.out.println(" - Is this number? ===> " + match);
return match;
}
现在我疯了。以下是我的方法的一些输出:
[stdout] Test is - aasdfg - now test is - aasdfg - Is this number? ===> false
[stdout] Test is - aa sd fg - now test is - aasdfg - Is this number? ===> false
[stdout] Test is - 123.50 - now test is - 123.50 - Is this number? ===> true
[stdout] Test is - 123,50 - now test is - 123,50 - Is this number? ===> true
[stdout] Test is - 1 123.50 - now test is - 1 123.50 - Is this number? ===> false
输出的最后一行是奇怪的!
建议 - 测试值来自HSSFCell#getStringCellValue()
- 可能这里有问题。评论String#replaceAll
无效。
答案 0 :(得分:3)
如果我输入1 123
,您的代码对我有用为什么不在String中找出是的字符?
for (char c : test.toCharArray())
{
System.out.println(0+c);
}
答案 1 :(得分:1)
由于千人之前的空白是“奇怪的”空格,试试这个:
test = test.replaceAll("(\\d+)[^\\d.,]+(\\d+)|\\s+", "$1$2");
答案 2 :(得分:0)
删除空格的常用方法是:
test = test.replaceAll("\\s", "");
逗号不是可解析的double
的有效字符。实际上,由于double可以表示的最大和最小可能值,并非所有数字组合都是可解析的。
确定字符串是否可以解析为double的最简单和最好的方法是使用JDK尝试解析:
public static boolean isNumber(String test) {{
try {
Double.parseDouble(test.trim());
return true;
} catch (NumberFormatException ignore) {
return false;
}
}
答案 3 :(得分:0)
String s = stemp.replaceAll("\\s","");
答案 4 :(得分:0)
正如所有人所说的尝试使用\\s
,这是我检查的简单方法:
public static boolean isStringisDoubleOrNot(String myvalue) {
try {
Double.parseDouble(myvalue);
return true;
} catch (NumberFormatException e) {
return false;
}
}
答案 5 :(得分:0)
如何检查字符串是否可以解析为双倍?
static boolean canBeParsed(String str)
{
try
{
Double.parseDouble(str.trim().replaceAll("\\s",""));
}
catch (Exception ignored)
{
return false;
}
return true;
}
编辑:如果你想从字符串中删除空格,请使用.replaceAll(“\ s”,“”)
答案 6 :(得分:0)
我猜你的变量测试正在被其他线程访问。
使用synchronized关键字
synchronized(test)
{
//your complete code
}
答案 7 :(得分:0)
让我们说我们不知道千万之前到底是什么。它可能是\ n,\ t,''或dunno是什么。因此,不要仅删除空格,而是尝试仅传递数字和点,使用sinple“for loop”并忽略其他所有内容。
StringBuilder sb;
for (int i = 0; i < test.length; ++i)
if ((test.charAt(i) >= '0' && test.charAt(i) <= '9') || test.charAt(i) == '.')
sb.append(test.charAt(i));