2013-05-28 23 views
1

我有一個字符串如無定界符:DIGITAL SPORTS$8.95HD AO$9.95UCC REC$1.28RENTAL FEE$7.00LOCAL FRANCHISE$4.67 現在我想分割字符串,並創建一個映射爲分裂使用正則表達式的字符串時存在使用Java

DIGITAL SPORTS $8.95 
HD AO $9.95 
UCC REC $1.28 
RENTAL FEE $7.00 
LOCAL FRANCHISE $4.67 

我寫了一個正則表達式來拆分串。請在下面找到一段代碼

private static String ledgerString = "DIGITAL SPORTS$8.95HD AO$9.95UCC REC$1.28RENTAL FEE$7.00LOCAL FRANCHISE$4.67"; 
private static Pattern pattern1 = Pattern.compile("([[a-zA-Z ]*\\$[0-9]*.[0-9][0-9]]*)"); 
private static Matcher matcher = null; 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    matcher = pattern1.matcher(ledgerString.trim()); 

    if (matcher.find()) { 

     System.out.println(matcher.group(1)); 
    } 

} 

請你有人幫助我如何從上面的字符串

回答

1
private static String ledgerString = "DIGITAL SPORTS$8.95HD AO$9.95UCC REC$1.28RENTAL FEE$7.00LOCAL FRANCHISE$4.67"; 
private static Pattern pattern1 = Pattern.compile("([a-zA-Z ]+)(\\$[0-9]*\\.[0-9][0-9])"); 
private static Matcher matcher = null; 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    matcher = pattern1.matcher(ledgerString.trim()); 

    while (matcher.find()) { 

     System.out.println(matcher.group(1) + " " + matcher.group(2)); 
    } 

} 
0

也許你可以替換爲「$」符號的所有事件中提取數據「 $」 (逗號美元)符號。之後你可以用「,」(逗號)分割它。這樣做:

ledgerString = ledgerString.replaceAll("$", ",$"); 
String[] tokens = ledgerString.split(","); 
+0

,而美元的費用將是存儲在偶數索引處。你已經可以將它存儲在一個地圖上... –

+0

不,第一個元素之後的所有其餘的將像'$ 8.95名稱的下一個產品' – Sharky

1

試試這個:

The Regex: (?:(.+?)(\$\d*(?:\.\d+)?)) 

String regex = "(?:(.+?)(\\$\\d*(?:\\.\\d+)?))"; 

Demo

+0

嗨艾哈邁德它的作品非常感謝.. – user2394281

2

你在第1組模式是字符類[...]這可能是現在你潔具要做。也許改變你的模式

Pattern.compile("([a-zA-Z ]*)(\\$[0-9]*.[0-9][0-9]*)"); 

,並使用它像這樣

while (matcher.find()) { 
    System.out.println(matcher.group(1)+" "+matcher.group(2)); 
} 

此外,由於Java7您可以命名組(?<name>...)所以這也是可能的

Pattern.compile("(?<name>[a-zA-Z ]*)(?<price>\\$[0-9]*.[0-9][0-9]*)"); 

while (matcher.find()) { 
    System.out.println(matcher.group("name")+" "+matcher.group("price")); 
} 

輸出

DIGITAL SPORTS $8.95 
HD AO $9.95 
UCC REC $1.28 
RENTAL FEE $7.00 
LOCAL FRANCHISE $4.67 
0

要使用正則表達式是一個每一個你感興趣的字符串匹配,因此要使用

Pattern.compile(「([A-ZA-Z] \ $ [0-9]。[0-9] [0-9])「);

因爲這標識了您感興趣的每條'行'。然後您可以在每行上使用split(「$」)將描述與價格分開。

0

這裏,但這樣做的另一種方式:

String mainString = "DIGITAL SPORTS$8.95HD AO$9.95UCC REC$1.28RENTAL FEE$7.00LOCAL FRANCHISE$4.67"; 

    String[] splittedArray = mainString.split("[0-9][A-Z]"); 
    int currentLength = 0; 
    for(int i =0; i < splittedArray.length; i++) { 
     String splitedString; 

     if(i == 0) { 
      char endChar = mainString.charAt(splittedArray[i].length()); 
      splitedString = splittedArray[i] + endChar; 
      currentLength += splittedArray[i].length(); 
     } 
     else if(i == splittedArray.length -1){ 
      char beginChar = mainString.charAt(currentLength + 1); 
      splitedString = beginChar + splittedArray[i]; 
     } 
     else { 
      char beginChar = mainString.charAt(currentLength + 1); 
      char endChar = mainString.charAt(currentLength+splittedArray[i].length()+2); 
      splitedString = beginChar + splittedArray[i] + endChar; 
      currentLength += splittedArray[i].length()+2; 
     } 
     System.out.println(splitedString); 
    } 
在這種情況下,所有的按鍵(數字體育,高清AO等)將在奇數索引
相關問題