我有一個字符串我們可以向後分割Java String嗎?
Product Description ID1 ID2 QTY Rate1 Rate2
我想你打破它作爲
Product Description|ID1|ID2|QTY|Rate1|Rate2
唯一相同的分隔符,我可以看到的是空間。但是產品描述可以是任意數量的單詞。所以我不知道它會有多少空間。但是其他字符串中的空格是固定的。
目前我將它分成數組,適當地獲取它的長度和concat。有更直接的方法嗎?
我有一個字符串我們可以向後分割Java String嗎?
Product Description ID1 ID2 QTY Rate1 Rate2
我想你打破它作爲
Product Description|ID1|ID2|QTY|Rate1|Rate2
唯一相同的分隔符,我可以看到的是空間。但是產品描述可以是任意數量的單詞。所以我不知道它會有多少空間。但是其他字符串中的空格是固定的。
目前我將它分成數組,適當地獲取它的長度和concat。有更直接的方法嗎?
這並不完全清楚你的意思是「更直接」,但我假設你想避免連接步驟。
一種方式將是如下:
使使用Matcher.find(int)
找到的位置的初始通「N - 第五」分隔符。 (這需要你作爲一種隊列使用find
確定的偏移的使用int[]
具有5個元素。)
使用String.substring
之前提取的字符串和隔板
使用String.split
後分裂第二個子字符串分隔最後5個字段。
如果你不停的偏移和匹配長度(從步驟#1),你可以用一個循環,並substring
電話更換步驟3中的split
通話。
(的原因,你不能在一般的分裂「倒退」是正則表達式不能向後匹配,或者更確切的說,如果你這樣做,你可能會以不同最終分裂,當你做到了「轉發」 。這樣做可以避免做2次遍歷。顯然,在你的具體情況下,分隔符正則表達式將是「一個或多個空白」,它可以在兩個方向上工作......如果有能力做到這一點在Matcher API中)。
反轉,字符串。
基於空間的分析/拆分。
將所有單詞從解析/拆分單詞的集合中拉出時,重新翻轉所有單詞。
不是超優雅的,但它應該工作。
將其正常拆分爲數組 您將得到一個包含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(),但是這兩種方法獲得相同的結果
使用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();
// 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());
我希望這可以解決您的要求。
您的方法對我來說似乎合理,但是您能否顯示代碼? – clcto 2014-10-08 15:01:28
與@ Robert3452的回答完全相同。 – raka 2014-10-08 15:07:27