【发布时间】:2010-01-23 08:34:56
【问题描述】:
我写了一个简单的java应用,有问题请帮帮我;
我有一个文件(只是示例):
1.TXT
-------
SET MRED:NAME=MRED:0,MREDID=60;
SET BCT:NAME=BCT:0,NEPE=DCS,T2=5,DK0=KOR;
CREATE LCD:NAME=LCD:0;
-------
这是我的源代码
import java.io.IOException;
import java.io.*;
import java.util.StringTokenizer;
class test1 {
private final int FLUSH_LIMIT = 1024 * 1024;
private StringBuilder outputBuffer = new StringBuilder(
FLUSH_LIMIT + 1024);
public static void main(String[] args) throws IOException {
test1 p=new test1();
String fileName = "i:\\1\\1.txt";
File file = new File(fileName);
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, ";|,");
while (st.hasMoreTokens()) {
String token = st.nextToken();
p.processToken(token);
}
}
p.flushOutputBuffer();
}
private void processToken(String token) {
if (token.startsWith("MREDID=")) {
String value = getTokenValue(token,"=");
outputBuffer.append("MREDID:").append(value).append("\n");
} else if (token.startsWith("DK0=")) {
String value = getTokenValue(token,"=");
outputBuffer.append("DK0=:").append(value).append("\n");
} else if (token.startsWith("NEPE=")) {
String value = getTokenValue(token,"=");
outputBuffer.append("NEPE:").append(value).append("\n");
}
if (outputBuffer.length() > FLUSH_LIMIT) {
flushOutputBuffer();
}
}
private String getTokenValue(String token,String find) {
int start = token.indexOf(find) + 1;
int end = token.length();
String value = token.substring(start, end);
return value;
}
private void flushOutputBuffer() {
System.out.print(outputBuffer);
outputBuffer = new StringBuilder(FLUSH_LIMIT + 1024);
}
}
我想要这个输出:
MREDID:60
DK0=:KOR
NEPE:DCS
但是这个应用程序向我展示了这个:
MREDID:60
NEPE:DCS
DK0=:KOR
请告诉我如何处理这个问题,因为首先必须是 DK0,这只是一个示例;我的真实应用程序有 14000 行
谢谢...
【问题讨论】:
-
从对我的回答的评论中,我猜我并不完全理解您要解决的问题。您是否希望 MREDID、DK0 和 NEPE 在您的文件中出现不止一次,并且您想将它们全部打印出来吗?实际上,您是否希望以特定顺序打印更多数量的唯一令牌,而您的源代码中的三个仅作为示例?
-
是的,完全正确;你能帮我吗...
-
在这种情况下,我假设 mredid、nepe 和 dk0 可能会出现多次。您想以下列方式打印它们:mredid, dk0, nepe, mredid, dk0, nepe... 还是 mredid, mredid, dk0, dk0, nepe, nepe?请编辑您的问题,也许使用稍大的示例 txt 文件。
标签: java split stringtokenizer