在线搜索字符串

时间:2012-10-30 07:18:55

标签: java string text-files

我在处理一行中的字符串时遇到问题, 例如,我在.txt文件中有以下行:

ussdserver link from host /127.0.0.1:38978(account smpp34) is up|smpp34|2012-10-28 17:02:19
ussdserver link from host localhost/127.0.0.1:8088(account callme) is up|callme|2012-10-28 17:02:20

我需要我的代码才能在“帐户”之后(第一行是smpp34)和单词“up”(在“是”单词之后)获得单词。

我考虑使用String.charAt()方法,但它在这里不起作用,因为我需要的单词可以在不同的地方,如上例所示。

3 个答案:

答案 0 :(得分:1)

尝试使用以下String类的方法。

String inputStr = "ussdserver link from host /127.0.0.1:38978(account smpp34) is up|smpp34|2012-10-28 17:02:19";
int index1 = inputStr.indexOf("account");
int index2 = inputStr.indexOf(')',index1);
String accountName = inputStr.substring(index1+8,index2); // you get smpp34

index1 = inputStr.indexOf("|");
index2 = inputStr.lastIndexOf(' ', index1);
String state = inputStr.substring(index2+1, index1) // you get up

答案 1 :(得分:0)

是的,最好在这种情况下使用正则表达式。但是一个更简单的方法可以专门用于以上情况。只需尝试从分割,然后读取直到字符串-5的长度为长度将为您提供第一个单词并尝试类似于第二个单词..

IF和仅当上面的String模式永远不会改变时..Esese会建议使用regex ..

答案 2 :(得分:0)

尝试这样的RegEx。

  Pattern pattern = Pattern.compile(".*account\\s([^\\s]*)\\)\\sis\\s([^|]*)|.*");
  Matcher matcher = pattern.matcher("ussdserver link from host /127.0.0.1:38978(account smpp34) is up|smpp34|2012-10-28 17:02:19");
  while (matcher.find()) {
    System.out.println(matcher.group(1));//will give you 'smpp34'
    System.out.println(matcher.group(2));//will give you 'up'
    return;
  }