站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题求助,懂java输入输出流的进

求助,懂java输入输出流的进

摘要: 求助,懂java输入输出流的进


如何用java实现下面算法:
提供输入如下:

sf-12387-#38;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 -#60; str.length(); i++) {
if (chars.indexOf(str.charAt(i)) -#62; 0) {
return i;
}
}

return -1;
}

private int findFirstNotIn(String str, String chars, int start) {
for (int i = start; i -#60; str.length(); i++) {
if (chars.indexOf(str.charAt(i)) == -1) {
return i;
}
}
return -1;
}

String getNext() {
String chars = -#34;0123456789-#34;;
int i = findFirstIn(str, chars, pos);
if (i == -1) {
return null;
}
if (i -#62; 0 -#38;-#38; str.charAt(i - 1) == -#39;--#39;) {
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 = -#34;sf-12387-#38;123487++ 12434- + 2123434 a234/n-#34;
+ -#34;123 =+-234554-=0 =-+23454 333-33-#34;;
Tool tool = new Tool(s);
String t;
while ((t = tool.getNext()) != null) {
System.out.println(t);
}
}
}


还是给你个流的示例吧

import java.io.IOException;
import java.io.InputStream;

public final class Test {

public static void main(String[] args) throws IOException {
String s = -#34;sf-12387-#38;123487++ 12434- + 2123434 a234/n-#34;
+ -#34;123 =+-234554-=0 =-+23454 333-33-#34;;
NumberTokenStream stream = new NumberTokenStream(s);
int c;
while ((c = stream.read()) -#62;= 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 -#62;= buffer.length()) {
buffer = tool.getNext();
pos = 0;
return (buffer == null ? -1 : -#39; -#39;);
} 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 -#60; str.length(); i++) {
if (chars.indexOf(str.charAt(i)) -#62; 0) {
return i;
}
}

return -1;
}

private int findFirstNotIn(String str, String chars, int start) {
for (int i = start; i -#60; str.length(); i++) {
if (chars.indexOf(str.charAt(i)) == -1) {
return i;
}
}
return -1;
}

String getNext() {
String chars = -#34;0123456789-#34;;
int i = findFirstIn(str, chars, pos);
if (i == -1) {
return null;
}
if (i -#62; 0 -#38;-#38; str.charAt(i - 1) == -#39;--#39;) {
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);
}
}


ding!!!!!!!!1


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


谢谢那位高人的指点!让我有醍醐灌顶之感,我也觉得没必要借助输入输出流操作得出想要的数字的,直接用字符串处理算法做就行了,谢谢!


↑返回目录
前一篇: request的小问题
后一篇: List.removeall的效率问题?