我正在构建一个程序来浏览一个包含这样的条目的日志文件:
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)。如您所见,数字的位数不同。
如何从这些字符串中获取最后一个数字?
答案 0 :(得分:2)
一种可能的解决方案是根据空格来split字符串:
String[] splitted = myStr.split("\\s+");
然后取最后一个元素:
splitted[splitted.length - 1];
如果您想int
值,则应使用Integer#parseInt。
另一种解决方案是使用lastIndexOf和substring ..
答案 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();
}