2012-10-30 56 views
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 

我需要我的代碼後得到了這個詞「賬戶「(在第一行是smpp34)和單詞」向上「(在」is「之後)。

我想過使用String.charAt()方法,但它在這裏不起作用,因爲我需要的詞可以在不同的地方,如上例所示。

+11

你嘗試過什麼?你有檢查出的字符串indexOf和子字符串?你對正則表達式有什麼瞭解嗎? –

+0

使用正則表達式而不是charAt。 java.lang.regex。 –

回答

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 
0

呀其最好使用正則表達式在這種cases..But的更簡單的方法可以專門爲上述情況下使用。只需嘗試從)然後閱讀,直到字符串-5的長度長度會給你第一個字,並嘗試類似的第二個字..

IF和只有上面的字符串模式永遠不會改變..Else將推薦使用正則表達式。

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; 
    }