Java如何用string中的单个空格replace2个或更多空格并删除前后空格

在Java中寻找快速,简单的方法来改变这个string

" hello there " 

看起来像这样的东西

 "hello there" 

在那里我用一个空格replace所有这些多个空格,除了我还希望string开始处的一个或多个空格消失。

像这样的东西让我部分在那里

 String mytext = " hello there "; mytext = mytext.replaceAll("( )+", " "); 

但不完全。

尝试这个:

 String after = before.trim().replaceAll(" +", " "); 

也可以看看

  • String.trim()
    • 返回string的副本,省略前导和尾随空白。
  • regular-expressions.info/Repetition

没有trim()正则expression式

也可以用一个replaceAll ,但是这比trim()方法的可读性要差得多。 尽pipe如此,它只是为了显示正则expression式可以做什么:

  String[] tests = { " x ", // [x] " 1 2 3 ", // [1 2 3] "", // [] " ", // [] }; for (String test : tests) { System.out.format("[%s]%n", test.replaceAll("^ +| +$|( )+", "$1") ); } 

有3个替代:

  • ^_+ :string开头的任何空格序列
    • 匹配并replace$1 ,捕获空string
  • _+$ :string末尾的任何空格序列
    • 匹配并replace$1 ,捕获空string
  • (_)+ :任何与上述匹配的空间序列,意味着它在中间
    • 匹配并replace$1 ,捕获一个空间

也可以看看

  • regular-expressions.info/Anchors

你只需要一个:

 replaceAll("\\s{2,}", " ").trim(); 

在那里你匹配一个或多个空格,并用一个空格replace它们,然后在开始和结束时修剪空格(实际上,你可以通过首先修剪来反转,然后匹配,使正则expression式更快,正如有人指出的那样)。

要快速testing这一点,请尝试:

 System.out.println(new String(" hello there ").trim().replaceAll("\\s{2,}", " ")); 

它会返回:

 "hello there" 

使用Apache commons StringUtils.normalizeSpace(String str)方法。 在这里看到文档

要消除string开头和结尾处的空格,请使用String#trim()方法。 然后使用你的mytext.replaceAll("( )+", " ")

您可以先使用String.trim() ,然后对结果应用regex replace命令。

这完全适用于我: sValue = sValue.trim().replaceAll("\\s+", " ");

你也可以使用lookarounds。

 test.replaceAll("^ +| +$|(?<= ) ", ""); 

要么

 test.replaceAll("^ +| +$| (?= )", "") 

<space>(?= )匹配空格字符,后面紧跟着另一个空格字符。 因此,在连续的空格中,它将匹配除最后一个空格以外的所有空格,因为它们之后没有空格字符。 在移除操作之后,这将为连续空间留下一个单独的空间。

例:

  String[] tests = { " x ", // [x] " 1 2 3 ", // [1 2 3] "", // [] " ", // [] }; for (String test : tests) { System.out.format("[%s]%n", test.replaceAll("^ +| +$| (?= )", "") ); } 

试试这个。

示例代码

 String str = " hello there "; System.out.println(str.replaceAll("( +)"," ").trim()); 

OUTPUT

 hello there 

首先它将用单个空间replace所有的空间。 比我们必须要做的修剪String因为String开始和String结束它将replace单个空间的所有空间,如果StringString开始和String结尾处有空格所以我们需要修剪它们。 比你得到你想要的String

这对我有效

 scan= filter(scan, " [\\s]+", " "); scan= sac.trim(); 

其中filter是跟随函数,scan是inputstring:

 public String filter(String scan, String regex, String replace) { StringBuffer sb = new StringBuffer(); try { Pattern pt = Pattern.compile(regex); Matcher m = pt.matcher(scan); while (m.find()) { m.appendReplacement(sb, replace); } m.appendTail(sb); } catch (Exception e) { e.printStackTrace(); } finally { return sb.toString(); } } 

请参阅String.replaceAll

使用正则expression式"\s"并replace为" "

然后使用String.trim

 String str = " hello world" 

首先减less空间

 str = str.trim().replaceAll(" +", " "); 

大写的第一个字母和小写的一切

 str = str.substring(0,1).toUpperCase() +str.substring(1,str.length()).toLowerCase(); 
 public class RemoveExtraSpacesEfficient { public static void main(String[] args) { String s = "my name is mr space "; char[] charArray = s.toCharArray(); char prev = s.charAt(0); for (int i = 0; i < charArray.length; i++) { char cur = charArray[i]; if (cur == ' ' && prev == ' ') { } else { System.out.print(cur); } prev = cur; } } } 

上面的解决scheme是O(n)的复杂度不使用任何Java函数的algorithm。

检查这个…

 public static void main(String[] args) { String s = "ABCDEFG\tH I\rJ\nK\tL"; System.out.println("Current : "+s); System.out.println("Single Space : "+singleSpace(s)); System.out.println("Space count : "+spaceCount(s)); System.out.format("Replace all = %s", s.replaceAll("\\s+", "")); // Example where it uses the most. String s = "My name is yashwanth . M"; String s2 = "My nameis yashwanth.M"; System.out.println("Normal : "+s.equals(s2)); System.out.println("Replace : "+s.replaceAll("\\s+", "").equals(s2.replaceAll("\\s+", ""))); } 

如果String只包含单个空格,那么replace()将不会被replace,

如果空格不止一个,则replace()操作执行并删除空格。

 public static String singleSpace(String str){ return str.replaceAll(" +| +|\t|\r|\n",""); } 

统计string中的空格数量。

 public static String spaceCount(String str){ int i = 0; while(str.indexOf(" ") > -1){ //str = str.replaceFirst(" ", ""+(i++)); str = str.replaceFirst(Pattern.quote(" "), ""+(i++)); } return str; } 

Pattern .quote(“?”)返回文字模式String。

我的方法之前,我发现第二个答案使用正则expression式作为一个更好的解决scheme。 也许有人需要这个代码。

 private String replaceMultipleSpacesFromString(String s){ if(s.length() == 0 ) return ""; int timesSpace = 0; String res = ""; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c == ' '){ timesSpace++; if(timesSpace < 2) res += c; }else{ res += c; timesSpace = 0; } } return res.trim(); } 

请使用下面的代码

 package com.myjava.string; import java.util.StringTokenizer; public class MyStrRemoveMultSpaces { public static void main(String a[]){ String str = "String With Multiple Spaces"; StringTokenizer st = new StringTokenizer(str, " "); StringBuffer sb = new StringBuffer(); while(st.hasMoreElements()){ sb.append(st.nextElement()).append(" "); } System.out.println(sb.toString().trim()); } }