0

我正在构建一个程序来检查具有以下条目的日志文件:

en halo%20reach%20noble%20actual%20in%20theater 1 659
en Wazir_Khan_Mosque 2 77859
en Waziristan_War 3 285976
en Wazirpur_Upazila 1 364

我想输出出现在每个字符串末尾的数字(即 659、77859、285976、285976、364)。如您所见,这些数字具有不同的位数。

如何从这些字符串中获取最后一个数字?

4

5 回答 5

2

一种可能的解决方案是根据空格拆分字符串:

String[] splitted = myStr.split("\\s+");

然后取最后一个元素:

splitted[splitted.length - 1];

如果你想int重视,你应该使用Integer#parseInt

另一种解决方案是使用lastIndexOfsubstring ..

于 2013-09-08T15:53:00.857 回答
1
int pos = line.lastIndexOf(' ');
int value = Integer.parseInt(line.substr(pos+1));
于 2013-09-08T15:54:39.307 回答
0

试试这个,可能不是很好

public static void main(String[] args) throws FileNotFoundException, IOException {
    BufferedReader br = new BufferedReader(new FileReader("log.txt"));
try {
    String line = br.readLine();
    List<String> stringList = new ArrayList<>();
    while(line!=null) {
        String[] strsplit = line.split(" ");
        line = br.readLine();
        for(int i=3;i<strsplit.length;i+=4) {
            stringList.add(strsplit[i]);
        }
    }
    System.out.println(stringList);
} finally {
    br.close();
}
于 2013-09-08T16:19:16.230 回答
0

如果您正在阅读每一行并分配给这样的字符串

String line = "en halo%20reach%20noble%20actual%20in%20theater 1 659";

那么这样做应该会给你最后一个数字

String words[] = line.split("\\s");
System.out.println(words[words.length - 1]);
于 2013-09-08T15:55:02.117 回答
0

我通常不推荐正则表达式,因为它们在 Stackoverflow 上经常被滥用(尤其是在涉及 XML/HTML 时),但这是学习如何使用它们的完美案例!

在空格上拆分,虽然这不会像这种方法那么健壮;如果空格变化,它将继续工作,并允许您在一个操作中捕获所有其他数据,您最终可能会想要:

^en\s+(.*)\s+(\d+)\s+(\d+)$: 点击查看它的工作原理!

然后使用它:

final Pattern p = Pattern.compile("^en\\s+(.*)\\s+(\\d+)\\s+(\\d+)$");
final Matcher m = p.matches("en Wazirpur_Upazila 1 364");
final String g1 = m.group(1); // Wazirpur_Upazila
final String g2 = m.group(2); // 1
final String g3 = m.group(3); // 364
于 2013-09-08T16:17:15.100 回答