2016-03-02 77 views
-1

我有字符串數組輸出,但它包含]與最後一個值。如何使用Java避免數組中最後一個值的']'?

output=AA 
output=BB 
output=CC 
output=DD] 

如何避免]最後DD]? 我試過,

int stringLength = ss.length(); 
String subString = ss.substring(0, stringLength-1); 
System.out.println(subString); 

但它避免了所有元素的最後一個值。那麼我需要怎麼做呢?

+6

如何打印數組?從一開始,這可能是錯誤的,也就是說,我假設你使用'Arrays.toString()'然後分割結果 - 而不是去這裏。 – Thomas

+0

什麼是您的陣列actully包含以及如何嘗試迭代請添加更多有關數組的信息(您要打印) –

+0

請源代碼。 –

回答

1

這將解決以高效和簡單的方法您的問題:

int stringLength = ss.length(); // this line can be deleted as you don't need it anymore here 
String subString = ss.replace("]",""); 
System.out.println(subString); 
+0

非常感謝您的答覆。它有效,但我認爲這不是解決問題的好方法。 – Emalka

+1

這將使用空字符串替換字符串內的所有「]」。這不是你想要的嗎?或者只匹配最後一個字符? – goncalopinto

+0

就在這一刻,這就夠了。但是,我認爲這可能是未來編程中的一個問題,如果我將使用這個。謝謝。 – Emalka

2

如果你想打印出一個數組,並使用Java 8則StringJoiner可以幫助你創造一個輕鬆格式化輸出。

String[] arr = {"output=AA", "output=BB", "output=CC", "output=DD"}; 
//the "\n" as parameter is used as a seperator for each array element here 
StringJoiner joiner = new StringJoiner("\n"); 
for(String s : arr) joiner.add(s); 
System.out.println(joiner); 

否則,如果您鴕鳥政策使用java 8,你可以只打印第一元素和追加下一個數組元素的String換行符打印正確格式化數組:

String[] arr = {"output=AA", "output=BB", "output=CC", "output=DD"}; 
StringBuilder builder = new StringBuilder(); 
if(arr.length > 0) builder.append(arr[0]); 
for (int i = 1; i<arr.length;++i) { 
    builder.append("\n"+arr[i]); // append line break first to not have a linebreak as list char. 
} 
System.out.println(builder); 

如果您使用的是Arrays.toString,那麼您通常必須解決此方法用於打印Object的固定格式,這將會導致一些用法subStringreplace,這不應該是打印陣列。

+0

非常感謝您的回覆 – Emalka

3

在你回答我ansumption在評論你的狀態,你正在做這樣的事情:

String[] array = new String[]{"AA", "BB", "CC", "DD" }; 
String[] elems = Arrays.toString(array).split(","); 
for(String e : elems) { 
    System.out.println(e); //and here you try to get rid of the brackets 
} 

這似乎是一種錯誤的方式(不知道你的代碼,但是有99%的把握是)。僅僅過了直接的元素循環:

String[] array = new String[]{"AA", "BB", "CC", "DD" }; 
for(String e : array) { 
    System.out.println(e); 
} 

除非你正在做一些完全不同的(你沒有告訴我們)沒有必要先使用Arrays.toString(),然後再次分裂。即使數組元素不是字符串,但System.out.println()會使用元素的toString()方法,就像Arrays.toString()會做的那樣。

編輯:根據你的評論,你從某個位置得到一些字符串,基本上是[ [xxx/AA, xxx/BB], [xxx/CC] ]的形式。使用String.split()這裏可能是錯誤的方法,因爲您可能會保留分組等。

假設嵌套在所有情況下都保持不變,即有喜歡[ [ [ xxx/AA ], [xxx/BB] ] ]沒有額外的分組,我建議採用兩步法使用正則表達式:

Pattern groupsPattern = Pattern.compile("\\[([^\\[]+?)\\]"); 
Pattern contentPattern= Pattern.compile("/([^,/]+)\\s*(?:,|$)"); 

//Step 1: look for groups of text in square brackets, 
//i.e. look for "xxx, yyy" in "[xxx, yyy]" 
Matcher groupsMatcher = groupsPattern.matcher(input); 

while(groupsMatcher.find()) { 

    //Step 2: extract the values you're looking for from the group 
    String groupContent = groupsMatcher.group(1); 

    //here you could split on commas or use another pattern, which I'll do 
    Matcher contentMatcher = contentPattern.matcher(groupContent); 
    while(contentMatcher.find()) { 
    System.out.println(contentMatcher.group(1)); 
    } 
} 

表達的短故障:

  • \[([^\[]+?)\]
    • [^\[]+?意味着最短至少一個字符的序列不是一個[
    • (...)捕獲上述作爲1組(0總是整個匹配)
    • \[...\]要求組由方括號
  • /([^,/]+)\s*(?:,|$)
    • ([^,/]+)包圍裝置的至少一個字符的任何序列,其是不是一個逗號或斜線和捕獲作爲組1
    • \s*指空白的任何序列(可以是無)
    • (?:,|$)是非易失捕獲與逗號匹配的組或匹配輸入的末尾,意味着:捕獲至少一個不是逗號或斜線的字符的任何序列,其前面是斜線,後面跟隨任何空格和逗號或輸入的結尾
+0

非常感謝您的回覆。我使用了[[http:// test/new/AA,http:// test/new/BB],[http:// test/new/CC,http:// test/new/DD,http:// test/new/EE],[http:// test/new/FF],[.....,.... 。],[.....,......,.....]]',並用','和'/'分割後使用'String my = output [output.length - 1 ];'把[AA,BB],CC,DD,EE],FF,......]'作爲最後一個值。所以,我需要避免在'BB]中使用'''''EE]' – Emalka

+0

@Emalka你可能想把它添加到你的問題中,因爲這是一個棘手的信息。並且請在最後加上你想要達到的目標,因爲我覺得這種方法存在一個普遍的缺陷。舉個例子:'AA,BB'周圍的括號不會有特殊含義嗎? – Thomas

+0

非常感謝您的信息和分享知識。 – Emalka