2017-09-04 68 views
1
For ex: "__I_love___India___"; 

在這個字符串中,我想完全刪除前導和尾隨空格,並在java中的字符串中使用多個空格。如何刪除字符串中的前導字符和尾字符以及多個空格處的空格?

即輸出應該是

I love India」;

+0

一個谷歌搜索「 java正則表達式刪除多餘的空格「返回的第一個結果[Java如何替換2或者mo重新使用字符串中的單個空格並刪除前導空格](https://stackoverflow.com/a/2932439/6577822) – fjoe

+1

您可以使用'replaceAll()'將多個空格替換爲單個空格並使用'trim() '擺脫主要和尾隨空間。但請注意在您的問題中使用「請提供代碼」,因爲您不是我們的僱主,我們也不是代碼編寫服務。這往往會讓你低估。我給了你一些強烈的暗示,現在去查看javadoc並自己完成其餘的工作。 – ajb

+0

@fjoe請注意,如果我想刪除前導空格和尾部空格,並發現Google命中「只刪除前導空格」,我可能不會看到這個問題。事實證明給出了正確的答案,但該問題的海報玷污了標題。 – ajb

回答

0

嘗試replaceAll("\\s{2,}", " ").trim(); 其中str是包含你想從剝離空白和使用裝飾的開頭和結尾的更新作爲評論的結果,因爲我忘了跟單替換多個空白空白 文本字符串變量空間

+1

這將刪除字符串中的所有空白。 – clemens

+1

@macmoonshine不,它不會。你太快投票和評論。把你的槍走花花公子:) – jamesc

+1

你被槍殺之前,你編輯你的答案 - 你現在已經死了;-) –

2

另一種方法是將StringTokenizer與空格一起用作令牌分隔符。讀取每個令牌並將其寫回到StringBuilder。

import java.util.*; 

class Words 
{ 

    /** 
    * Convenience method. 
    */ 
    public static StringBuilder deduplicateSpaces(String text) 
    { 
     return deduplicateDelimiters(text, " "); 
    } 

    public static StringBuilder deduplicateDelimiters(String text, String delim) 
    { 
     StringTokenizer  st = new StringTokenizer(text, delim); 
     StringBuilder   sb = new StringBuilder(); 
     boolean   firstRun = true; 

     while (st.hasMoreTokens()) 
     { 
      sb.append(firstRun? "" : delim) //prevent delimiter on the first token 
       .append(st.nextToken()  ); //append token itself 
      if (firstRun) { firstRun = false; } 
     } 

     return sb; 
    } 

    public static void main (String[] args) 
    { 
     String textS = " A  bbbb ccccc "; 
     String textU = "____A_____bbbb____ccccc___"; 

     System.out.println(deduplicateSpaces(textS)); 

     System.out.println(deduplicateDelimiters(textU, "_")); 
    } 
} 

輸出是:

A bbbb ccccc 
A_bbbb_ccccc 
+0

我沒有downvote,因爲這是一個想法(可能有點低水平),但這將是一個很好的例子與答案。 – AxelH

+0

@AxelH。 – Willmore

2

方法trim()去除前導和結尾間隔。爲了從字符串中間刪除重複的空格,可以使用正則表達式。

s2 = s1.replaceAll(「\\ s +」,「」).trim();

+0

謝謝Alex。但是dint想要使用內置方法。相反,我想使用用戶定義的方法刪除前導空格 – yashu

1

試試這個邏輯:

String input = "I love India "; 
input = input.trim().replaceAll("\\s+", " "); 

這裏的想法是使用兩個單獨的操作在字與字之間的開始/結束和空白處理的空白。我們希望完全刪除開始/結尾處的空白,並且String#trim()確實很好。然後,在單詞之間只會出現一個空格,而正則表達式替換處理這種情況。

1

您可以嘗試下列操作之一:

  • 純Java - String after = before.trim().replaceAll("\\s+", " ");
  • 純Java - String after = before.replaceAll("\\s{2,}", " ").trim();
  • Apache commons lang3 - String after = StringUtils.normalizeSpace(String str);
  • ...