我有一个正在运行的代码,它逐行读取csv文件,并在每行附加新信息。但我需要比较每一行的最后一个标记。如果最后一个令牌不等于前一行的最后一个令牌,我想将附加的前导标签增加1。
或者让事情更容易理解。 String'标签' =该行的最后一个标记。
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new FileReader(filename));
String line = br.readLine();
Scanner scanner;
while (line != null) {
sb.append(label);
int indexCount = 1;
scanner = new Scanner(line);
scanner.useDelimiter(",");
while (scanner.hasNext()) {
sb.append(" " + scanner.next() + ":" + indexCount);
}
sb.append(System.getProperty("line.separator"));
line = br.readLine();
}
我目前的输出是:
1 0.24887:1 0.64811:1 0.5987:1 0.39418:1 0.96313:1 0.92772:1 1:1
1 0.59092:1 0.66222:1 0.6655:1 0.45021:1 0.87868:1 0.92897:1 1:1
1 0.67556:1 0.66291:1 0.43898:1 0.37441:1 0.95397:1 0.92851:1 1:1
1 0.70637:1 0.66395:1 0.859:1 0.39656:1 0.96331:1 0.93005:1 2:1
1 0.93686:1 0.66841:1 0.66013:1 0.39382:1 0.96343:1 0.92674:1 2:1
1 0.1355:1 0.66448:1 0.15662:1 0.39256:1 0.98848:1 0.90344:1 2:1
我想要实现的目标是:
1 0.24887:1 0.64811:1 0.5987:1 0.39418:1 0.96313:1 0.92772:1 1:1
1 0.59092:1 0.66222:1 0.6655:1 0.45021:1 0.87868:1 0.92897:1 1:1
1 0.67556:1 0.66291:1 0.43898:1 0.37441:1 0.95397:1 0.92851:1 1:1
2 0.70637:1 0.66395:1 0.859:1 0.39656:1 0.96331:1 0.93005:1 2:1
2 0.93686:1 0.66841:1 0.66013:1 0.39382:1 0.96343:1 0.92674:1 2:1
2 0.1355:1 0.66448:1 0.15662:1 0.39256:1 0.98848:1 0.90344:1 2:1
我怎样才能做到这一点?
答案 0 :(得分:2)
至于,我能够理解你想要提取每行的最后部分。
例如:
1 0.24887:1 0.64811:1 0.5987:1 0.39418:1 0.96313:1 0.92772:1 1:1
您希望拥有1:1
之后1
和1
开始
我想到的唯一方法是使用split
函数
所以你可以做以下
String s = "1 0.24887:1 0.64811:1 0.5987:1 0.39418:1 0.96313:1 0.92772:1 1:1";
String[] sp = s.split(" ");
String[] parsedLastToken = sp[sp.length-1].split(":");
for (int i = 0; i < parsedLastToken.length; i++) {
System.out.println(parsedLastToken[i]);
}
输出:
1
1
答案 1 :(得分:1)
StringBuilder对象是可变的,您可以在任何地方插入文本,包括它们的开头。检查StringBuilder API并查找insert(...)方法的许多变体。另一种可能的解决方案:从每行数据创建一个对象,并为该类提供一种方法,以允许对象状态的正确可视化呈现。
为每一行使用一个新的StringBuilder也会使这更容易,然后将结果添加到一个主StringBuilder。
例如:
StringBuilder masterSb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(filename));
String line = br.readLine();
Scanner scanner;
while (line != null) {
StringBuilder sb = new StringBuilder();
// *** sb.append(label); // *** not sure what this is for
int indexCount = 1;
scanner = new Scanner(line);
scanner.useDelimiter(",");
String lastToken = "";
while (scanner.hasNext()) {
lastToken = scanner.next();
sb.append(" " + lastToken + ":" + indexCount);
}
sb.insert(0, lastToken + " "); // **** here we pre-pend the last token
sb.append(System.getProperty("line.separator"));
line = br.readLine();
scanner.close(); // ***** don't forget to close your Scanner
masterSb.append(sb.toString()); // ***** add line to master SB
}
警告:未经过测试的代码