如何使数字脱颖而出? [英] How to get numbers out of string?

查看:139
本文介绍了如何使数字脱颖而出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Java StreamTokenizer提取字符串的各种单词和数字,但是遇到了涉及包括逗号在内的数字的问题,例如10,567被读取为10.0和,567.

I'm using a Java StreamTokenizer to extract the various words and numbers of a String but have run into a problem where numbers which include commas are concerned, e.g. 10,567 is being read as 10.0 and ,567.

我还需要从可能出现的数字中删除所有非数字字符,例如$ 678.00应该是678.00或-87应该是87.

I also need to remove all non-numeric characters from numbers where they might occur, e.g. $678.00 should be 678.00 or -87 should be 87.

我相信可以通过whiteSpace和wordChars方法实现这些目标,但是有人知道如何实现吗?

I believe these can be achieved via the whiteSpace and wordChars methods but does anyone have any idea how to do it?

当前的基本streamTokenizer代码为:

The basic streamTokenizer code at present is:

        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在这里是否有用,因为从字符串中读取令牌后会进行任何解析.

Or could someone suggest a REGEXP to achieve this? I'm not sure if REGEXP is useful here given that any parding would take place after the tokens are read from the string.

谢谢

摩根先生.

推荐答案

StreamTokenizer已过时,最好使用

StreamTokenizer is outdated, is is better to use Scanner, this is sample code for your problem:

    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);

If you want to use comma as a floating point delimiter, use fi.useLocale(Locale.FRANCE);

这篇关于如何使数字脱颖而出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆