如何用java实现下面算法:
提供输入如下:sf-12387&123487++ 12434- + 2123434 a234
123       =+-234554-=0      =-+23454
输出: -12387 123487 12434 2123434 234 123 -234554 0 23454

解决方案 »

  1.   

    写了个工具,实现了取数值的算法。
    如果需要流,只需要简单的封一下就行了。class Tool {
        String str;    int pos;    Tool(String s) {
            str = s;
            pos = 0;
        }
        
        private int findFirstIn(String str, String chars, int start) {
            for (int i = start; i < str.length(); i++) {
                if (chars.indexOf(str.charAt(i)) > 0) {
                    return i;
                }
            }
            
            return -1;
        }
        
        private int findFirstNotIn(String str, String chars, int start) {
            for (int i = start; i < str.length(); i++) {
                if (chars.indexOf(str.charAt(i)) == -1) {
                    return i;
                }
            }
            return -1;
        }    String getNext() {
            String chars = "0123456789";
            int i = findFirstIn(str, chars, pos);
            if (i == -1) {
                return null;
            }
            if (i > 0 && str.charAt(i - 1) == '-') {
                i--;
            }
            
            int j = findFirstNotIn(str, chars, i + 1);
            if (j == -1) {
                pos = str.length();
                return str.substring(i);
            }
            
            pos = j + 1;
            return str.substring(i, j);
        }
    }
    public final class Test {    public static void main(String[] args) throws SQLException, ParseException {
            String s = "sf-12387&123487++ 12434- + 2123434 a234/n"
                    + "123       =+-234554-=0      =-+23454 333-33";
            Tool tool = new Tool(s);
            String t;
            while ((t = tool.getNext()) != null) {
                System.out.println(t);
            }
        }
    }
      

  2.   

    还是给你个流的示例吧import java.io.IOException;
    import java.io.InputStream;public final class Test {    public static void main(String[] args) throws IOException {
            String s = "sf-12387&123487++ 12434- + 2123434 a234/n"
                    + "123       =+-234554-=0      =-+23454 333-33";
            NumberTokenStream stream = new NumberTokenStream(s);
            int c;
            while ((c = stream.read()) >= 0) {
                System.out.print((char) c);
            }
            System.out.println();
        }
    }class NumberTokenStream extends InputStream {
        Tool tool;    int pos;    String buffer;    NumberTokenStream(String s) {
            tool = new Tool(s);
            buffer = tool.getNext();
            pos = 0;
        }    @Override
        public int read() throws IOException {
            if (buffer == null) {
                return -1;
            }
            if (pos >= buffer.length()) {
                buffer = tool.getNext();
                pos = 0;
                return (buffer == null ? -1 : ' ');
            } else {
                return buffer.charAt(pos++);
            }
        }}class Tool {
        String str;    int pos;    Tool(String s) {
            str = s;
            pos = 0;
        }    private int findFirstIn(String str, String chars, int start) {
            for (int i = start; i < str.length(); i++) {
                if (chars.indexOf(str.charAt(i)) > 0) {
                    return i;
                }
            }        return -1;
        }    private int findFirstNotIn(String str, String chars, int start) {
            for (int i = start; i < str.length(); i++) {
                if (chars.indexOf(str.charAt(i)) == -1) {
                    return i;
                }
            }
            return -1;
        }    String getNext() {
            String chars = "0123456789";
            int i = findFirstIn(str, chars, pos);
            if (i == -1) {
                return null;
            }
            if (i > 0 && str.charAt(i - 1) == '-') {
                i--;
            }        int j = findFirstNotIn(str, chars, i + 1);
            if (j == -1) {
                pos = str.length();
                return str.substring(i);
            }        pos = j + 1;
            return str.substring(i, j);
        }
    }
      

  3.   

    jamesfancy(边城狂人 <Java|C++] (★) ( )高人呀