gpt4 book ai didi

java - 如何从字符串中取出数字?

转载 作者:搜寻专家 更新时间:2023-10-31 08:14:19 24 4
gpt4 key购买 nike

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

关于java - 如何从字符串中取出数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com