少し奇妙な問題が発生しました。文字列の基本的な解析を行うための次のコードがあります。
for (int i = 0; i < lines.size(); i++) {
String line = lines.get(i);
//get time
int firstWhiteSpace = line.indexOf(" ");
String time = line.substring(0, firstWhiteSpace);
//problem is here vvvv
line = line.substring(firstWhiteSpace + 1, line.length());
//problem is here ^^^^
//get client
int firstColon = line.indexOf(":");
String client = line.substring(0, firstColon);
line = line.substring(firstColon + 1, line.length());
ChatMessage chatMessage = new ChatMessage();
chatMessage.setTime(time);
chatMessage.setClient(client);
chatMessage.setMessage(line);
messages.add(chatMessage);
}
したがって、基本的には、 (包括的)と(排他的)line = line.substring(a, b)
の間に行のサブストリングを取得することを期待します。ただし、印刷すると、部分文字列操作を実行する前に文字列全体を取得します。不思議なことに、デバッガー(Eclipse)を見ると、文字列の値は部分文字列ですが、文字配列には文字列全体が含まれています。a
b
line
たとえば、次の場合:
line = "Hello World"
そして私はします:
line = line.substring(0, 5);
その場合、lineの値は次のようになります。
"Hello"
ただし、文字配列は次のとおりです。
[H, e, l, l, o, , W, o, r, l, d]
したがって、私は少し混乱しています。ばかげて愚かなことを見逃してしまったらお詫びします。これはかなり可能です。
完全なコード、それほど複雑ではないクラス:
パブリッククラスChatParser{プライベート静的TS3ParserSettings設定;
public static void main(String[] args) {
ChatParser.setSettings("C:/Users/*****/javaWorkspace/TS3Parser/src/data/settings.txt");
ChatParser.parseChat();
}
public static void parseChat() {
ArrayList<String> lines = TextParser.parseTextLines(settings.getSetting("chatLogPath"));
ArrayList<ChatMessage> messages = new ArrayList<ChatMessage>();
for (int i = 0; i < lines.size(); i++) {
String line = lines.get(i);
//get time
int firstWhiteSpace = line.indexOf(" ");
String time = line.substring(0, firstWhiteSpace);
line = line.substring(firstWhiteSpace + 1, line.length());
//get client
int firstColon = line.indexOf(":");
String client = line.substring(0, firstColon);
line = line.substring(firstColon + 1, line.length());
ChatMessage chatMessage = new ChatMessage();
chatMessage.setTime(time);
chatMessage.setClient(client);
chatMessage.setMessage(line);
messages.add(chatMessage);
}
for (int i = 0; i < messages.size(); i++) {
System.out.println("TIME = " + messages.get(i).getTime() + " CLIENT = " + messages.get(i).getClient() + " MESSAGE = " + messages.get(i).getMessage());
}
}
public static void setSettings(String path) {
settings = SettingsParser.parseSettings(path);
}
}