如何使数字脱颖而出?

我正在使用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

回到顶部