如何用java实现下面算法:
提供输入如下:sf-12387&123487++ 12434- + 2123434 a234
123 =+-234554-=0 =-+23454
输出: -12387 123487 12434 2123434 234 123 -234554 0 23454
提供输入如下:sf-12387&123487++ 12434- + 2123434 a234
123 =+-234554-=0 =-+23454
输出: -12387 123487 12434 2123434 234 123 -234554 0 23454
如果需要流,只需要简单的封一下就行了。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);
}
}
}
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);
}
}