1

我有一个开头有多个空格的字符串。

String str = "  new york city";

我只想删除第一个字符之前的空格,因此 replaceAll 不起作用。

我有这行代码

 if (str.startsWith(" ")){
  str = str.replaceFirst(" ", "");          }

这会删除一个空间,但不是全部。所以我需要这条线被执行到

!str=startswith(" "))

我认为这可以通过循环来实现,但我对循环非常不熟悉。我怎样才能做到这一点?

先感谢您。

4

6 回答 6

2

replaceFirst需要一个正则表达式,所以你想要

str = str.replaceFirst("\\s+", "");

像馅饼一样简单。

于 2013-07-09T17:12:37.637 回答
2

你也可以使用这个:

s.replaceAll("^\\s+", ""); // will match and replace leading white space
于 2013-07-09T17:07:02.800 回答
0

你可以这样做:

//str before trim = "    new your city"
str = str.trim();
//str after = "new york city"
于 2013-07-09T17:05:38.730 回答
0

您可以将其更改ifwhile

 while (str.startsWith(" ")){
    str = str.replaceFirst(" ", ""); 

另一种选择是使用 Guava's CharMatcher,它支持仅修剪开头或仅结尾。

 str = CharMatcher.is( ' ' ).trimLeadingFrom( str );
于 2013-07-09T17:07:12.013 回答
0

使用 trim() 将删除开始和结束空格。但是,由于您要求删除起始空格,因此下面的代码可能会有所帮助。

public String trimOnlyLeadingSpace()
  {
    int i = this.count;
    int j = 0;
    int k = this.offset;
    char[] arrayOfChar = this.value;
    while ((j < i) && (arrayOfChar[(k + j)] <= ' '))
      ++j;
    return (((j > 0) || (i < this.count)) ? substring(j, i) : this);
  }
于 2013-07-09T17:09:04.670 回答
0

快速的 Google 搜索打开了一个页面,其中简要概述了两个基本循环,while 和 do-while:

http://www.homeandlearn.co.uk/java/while_loops.html

在您的情况下,您想使用“while”类型的循环,因为您想在进入循环之前检查条件。所以它看起来像这样:

while (str.startsWith(" ")){
  str = str.replaceFirst(" ", "");
}

您应该确保使用“”(只是一个空格)和“”(空字符串)之类的字符串来测试此代码,因为我不完全确定当输入字符串为空时 startsWith() 的行为方式。

学习循环将是非常重要的——至少,如果你的计划涉及的不仅仅是通过你不想参加的编程课程。(如果您认为“while”循环很复杂,请等到遇到“for”!)

于 2013-07-09T17:15:05.190 回答