2014-10-08 20 views
0

我有一個字符串我們可以向後分割Java String嗎?

Product Description ID1 ID2 QTY Rate1 Rate2 

我想你打破它作爲

Product Description|ID1|ID2|QTY|Rate1|Rate2 

唯一相同的分隔符,我可以看到的是空間。但是產品描述可以是任意數量的單詞。所以我不知道它會有多少空間。但是其他字符串中的空格是固定的。

目前我將它分成數組,適當地獲取它的長度和concat。有更直接的方法嗎?

+2

您的方法對我來說似乎合理,但是您能否顯示代碼? – clcto 2014-10-08 15:01:28

+0

與@ Robert3452的回答完全相同。 – raka 2014-10-08 15:07:27

回答

2

這並不完全清楚你的意思是「更直接」,但我假設你想避免連接步驟。

一種方式將是如下:

  1. 使使用Matcher.find(int)找到的位置的初始通「N - 第五」分隔符。 (這需要你作爲一種隊列使用find確定的偏移的使用int[]具有5個元素。)

  2. 使用String.substring之前提取的字符串和隔板

  3. 使用String.split後分裂第二個子字符串分隔最後5個字段。

如果你不停的偏移和匹配長度(從步驟#1),你可以用一個循環,並substring電話更換步驟3中的split通話。


(的原因,你不能在一般的分裂「倒退」是正則表達式不能向後匹配,或者更確切的說,如果你這樣做,你可能會以不同最終分裂,當你做到了「轉發」 。這樣做可以避免做2次遍歷。顯然,在你的具體情況下,分隔符正則表達式將是「一個或多個空白」,它可以在兩個方向上工作......如果有能力做到這一點在Matcher API中)。

-1

反轉,字符串。

基於空間的分析/拆分。

將所有單詞從解析/拆分單詞的集合中拉出時,重新翻轉所有單詞。

不是超優雅的,但它應該工作。

2

將其正常拆分爲數組 您將得到一個包含n + 5個組件的數組,其中n是產品說明中的單詞數。

然後,你知道:

Rate2 = arr[len-1] 
Rate1 = arr[len-2] 
QTY = arr[len-3] 
ID2 = arr[len-4] 
ID3 = arr[len-5] 

然後結合元件ARR [0]給Arr [LEN-6]在它們之間添加的空間。這給你你的產品描述。

或者你可以在輸出陣列上使用Collections.reverse(),但是這兩種方法獲得相同的結果

1

使用StringBuilder的,這可能是因爲緊湊的,你可以得到。好處是你不必纏繞很多指數。事實上,你不需要任何東西。

String foo = "Product Description Test Potato ID1 ID2 QTY Rate1 Rate2 "; 
    foo = foo.trim(); // get rid of any extra spaces, in case we have any, as a safety check 

    //the code that does your work 
    StringBuilder bar = new StringBuilder(foo); 
    // we have to add the pipe 5 times 
    for (int i = 5; i > 0; i--) { 
     bar.setCharAt(bar.lastIndexOf(" "), '|'); 
    } 
    foo = bar.toString(); 
1
// Product Description ID1 ID2 QTY Rate1 Rate2 
    // Product Description|ID1|ID2|QTY|Rate1|Rate2 

    String actWord = "Product it a middle data Description ID1 ID2 QTY Rate1 Rate2"; 
    String outputWord = null; 
    String[] arr = actWord.split(" "); 

    StringBuffer buf = new StringBuffer(); 
    for (int i = 0; i < arr.length; i++) { 
     System.out.println(arr[i] + "=" + (i < arr.length - 5)); 
     if (i < arr.length - 5) { 
      buf.append(arr[i] + " "); 

     } else 
      buf.append("|" + arr[i]); 
    } 
    System.out.println("output - " + buf.toString().trim()); 

我希望這可以解決您的要求。

相關問題