0

行の文字列の処理に問題があります。たとえば、.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

「account」の後の単語(最初の行ではsmpp34)と「up」という単語(「is」の単語の後)を取得するためのコードが必要です。

メソッドを使用することを考えString.charAt()ましたが、上記の例に示すように、必要な単語がさまざまな場所にある可能性があるため、ここでは機能しません。

4

3 に答える 3

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
于 2012-10-30T07:36:33.247 に答える
0

ええ、この種のケースでは正規表現を使用するのが最善です..しかし、より単純な方法は、上記のケース専用に使用できます。)から分割してみて、文字列 5 の長さから長さまで読み取ると、最初の単語が得られ、2 番目の単語についても同様に試行できます。

IF および上記の文字列パターンが変更されない場合のみ..そうでない場合は、正規表現の使用をお勧めします..

于 2012-10-30T07:37:46.873 に答える
0

このように正規表現を試してください。

  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;
  }
于 2012-10-30T07:51:30.247 に答える