如何使数字脱颖而出?
我正在使用Java
StreamTokenizer提取字符串的各种单词和数字,但是遇到了一个问题,其中涉及到逗号在内的数字,例如10,567被读为10.0和,567。
我还需要从可能会出现的数字中删除所有非数字字符,例如$ 678.00应该是678.00或-87应该是87。
我相信可以通过whiteSpace和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在这里是否有用,因为在从字符串中读取令牌后会进行任何解析。
谢谢
摩根先生。
回答:
StreamTokenizer已过时,最好使用Scanner,这是您的问题的示例代码:
String s = "$23.24 word -123"; Scanner fi = new Scanner(s);
//anything other than alphanumberic characters,
//comma, dot or negative sign is skipped
fi.useDelimiter("[^\\p{Alnum},\\.-]");
while (true) {
if (fi.hasNextInt())
System.out.println("Int: " + fi.nextInt());
else if (fi.hasNextDouble())
System.out.println("Double: " + fi.nextDouble());
else if (fi.hasNext())
System.out.println("word: " + fi.next());
else
break;
}
如果要使用逗号作为浮点定界符,请使用fi.useLocale(Locale.FRANCE);
以上是 如何使数字脱颖而出? 的全部内容, 来源链接: utcz.com/qa/422468.html