Java扫描程序,采用字符串的特定部分

时间:2012-03-26 14:26:19

标签: java java.util.scanner

输入问题并检查了类似的标题问题我会继续,因为我还不确定...

我有一些跟踪路径......例如

14  t1tug.sunet.se (109.105.102.14)  48.394 ms  46.590 ms t1tug.sunet.se (109.105.102.18)  46.549 ms
15  t1fre-ae0-v1.sunet.se (130.242.83.37)  46.563 ms  46.087 ms m1tug-ae0-v1.sunet.se (130.242.83.42)  46.114 ms
16  m1fre-ae0-v1.sunet.se (130.242.83.50)  46.941 ms  44.270 ms  44.739 ms
17  uu-br1-xe-1-2-0.sunet.se (130.242.85.134)  47.494 ms  47.179 ms  45.662 ms
18  uu-g.sunet.se (193.11.0.234)  47.732 ms  44.848 ms  46.631 ms
19  PB-VSS.UU.SE (130.238.6.229)  48.695 ms  48.375 ms  46.407 ms
20  infoglue.uu.se (130.238.7.24)  50.402 ms  51.741 ms  52.465 ms

使用startswith我剪切了我的数据,以便只处理以跳数开头的行,所以我想我已经简化了我的问题。

现在,从第一个路径到最后一个路径的所有数据在跳转名称之前都有4个字符。我只对这个名字感兴趣。有没有一种简单的方法可以从第5个字符到字符串的那一部分结束?

我只想要“m1fre-ae0-v1.sunet.se”

这将传递给csv文件。但我有能力,我只是不确定我会怎么做。我看过正则表达式,但是我对它的理解确实因为名称的格式而有所不同。我很乐意承认自己很弱。

非常感谢你的时间。

1 个答案:

答案 0 :(得分:2)

我认为它们有两种方式:

1.用“”拆分扫描仪字符串。然后你会像这样得到你想要的字符串:

String line = "14  t1tug.sunet.se (109.105.102.14)  48.394 ms  46.590 ms t1tug.sunet.se 109.105.102.18)  46.549 ms"
String splitted[] = line.trim().split("\\s+");
System.out.println(splitted[1]); //your desired string

当然,您需要在.split()方法中放置足够的空格

2.使用正则表达式替换字符串:

String line = "14  t1tug.sunet.se (109.105.102.14)  48.394 ms  46.590 ms t1tug.sunet.se (109.105.102.18)  46.549 ms";
String regexp = "^\\s*[0-9]+\s+([0-9A-Za-z\.\-]+)(.*)$";
line = line.replaceAll( regexp, "$1" );
System.out.println(line);