java如何从字符串中提取数字?
我正在使用Java StreamTokenizer提取字符串中的各种单词和数字,但遇到了一个问题,其中涉及到包括逗号的数字,例如10567被读取为10.0和567
我还需要从可能出现的数字中删除所有非数字字符,例如$678.00应为678.00或-87应为87
我相信这些都可以通过空格和wordChars方法实现,但是有人知道怎么做吗
目前基本的streamTokenizer代码是:
BufferedReader br = new BufferedReader(new StringReader(text));
StreamTokenizer st = new StreamTokenizer(br);
st.parseNumbers();
st.wordChars(44, 46); // ASCII comma, - , dot.
st.wordChars(48, 57); // ASCII 0 - 9.
st.wordChars(65, 90); // ASCII upper case A - Z.
st.wordChars(97, 122); // ASCII lower case a - z.
while (st.nextToken() != StreamTokenizer.TT_EOF) {
if (st.ttype == StreamTokenizer.TT_WORD) {
System.out.println("String: " + st.sval);
}
else if (st.ttype == StreamTokenizer.TT_NUMBER) {
System.out.println("Number: " + st.nval);
}
}
br.close();
或者有人能推荐一个REGEXP来实现这一点吗?我不确定REGEXP在这里是否有用,因为从字符串中读取令牌后会发生任何损坏
谢谢
摩根先生
# 1 楼答案
确保可以使用regexp执行此操作:
但是请注意,它会吃掉所有的逗号,如果使用美国数字格式,逗号只分隔千,这可能就是您想要的。在某些语言中,逗号代替点用作十进制分隔符。所以在解析国际数据时要小心
我让你自己把它翻译成Java
# 2 楼答案
这对我很有用:
# 3 楼答案
用于从字符串获取数字的代码。例如,我有字符串“123”,然后我想要数字123
资料来源:How to get number from string
# 4 楼答案
StreamTokenizer已过时,最好使用Scanner,这是解决您的问题的示例代码:
如果要使用逗号作为浮点分隔符,请使用
fi.useLocale(Locale.FRANCE);
# 5 楼答案
# 6 楼答案
试试这个:
净化文本将只包含字母数字和空格;在那之后将其标记化应该是轻而易举的事
编辑
编辑以保留小数点(在括号的末尾)
.
对于regexp来说是“特殊的”,因此它需要反斜杠转义