解析并捕获字符串末尾的数字

时间:2013-09-08 15:51:13

标签: java string

我正在构建一个程序来浏览一个包含这样的条目的日志文件:

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)。如您所见,数字的位数不同。

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

5 个答案:

答案 0 :(得分:2)

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

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

然后取最后一个元素:

splitted[splitted.length - 1];

如果您想int值,则应使用Integer#parseInt

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

答案 1 :(得分:1)

int pos = line.lastIndexOf(' ');
int value = Integer.parseInt(line.substr(pos+1));

答案 2 :(得分:0)

如果您正在阅读每一行并指定一个像这样的字符串

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

然后这样做会给你最后一个数字

String words[] = line.split("\\s");
System.out.println(words[words.length - 1]);

答案 3 :(得分: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

答案 4 :(得分: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();
}