从字符串中删除最多4个空格

时间:2010-07-07 22:38:51

标签: java string

我有一个循环的字符串Im数组。对于每个字符串,我需要从头开始删除最多4个空格。换句话说,如果只有2个空格,我删除2.如果有6个空格我删除4.如何在循环中指定它?

for(int i=0; i<stringArray.length; i++) {
    newString = REMOVE UP TO 4 SPACES FROM stringArray[i];
    stringArray[i] = newString;
}

谢谢!

3 个答案:

答案 0 :(得分:3)

试试这个:

stringArray[i] = stringArray[i].replaceFirst ("^ {0,4}", "");

答案 1 :(得分:1)

你关心尾随空格吗?

您可以根据正则表达式检查它是否与前面的4个或更多空格匹配,并使用子字符串剪切前4个空格。否则,如果前面少于4个空格(与RegEx不匹配),只需在Java中使用string.trim()。

答案 2 :(得分:1)

正则表达式是这项工作的最佳工具。我会一步一步解释:

简介

System.out.println(
    "# one ## two ### three #### four"
        .replaceAll("##", "@@")
);
//  "# one @@ two @@# three @@@@ four"

上面的代码段可以让您了解replaceAll的工作原理:它会将所有"##"替换为"@@"

模式

事实证明,replaceAll是一个基于正则表达式的方法:第一个参数是一个特殊的模式字符串,第二个参数是一个特殊的替换字符串。下一个片段说明了这个想法:

System.out.println(
    "# one ## two ### three #### four"
        .replaceAll("#{2}", "@@")
);
//  "# one @@ two @@# three @@@@ four"

现在我们使用"#{2}"作为第一个参数。相反,在正则表达式中,这意味着“#重复两次”;这与我们之前的模式完全相同,这就是为什么我们也得到相同的结果。

范围

正则表达式中的有界重复语法实际上非常具有表现力:我们还可以按如下方式定义范围,而不是精确重复:

System.out.println(
    "# one ## two ### three #### four"
        .replaceAll("#{1,3}", ":")
);
//  ": one : two : three :: four"

相当直观地,#{1,3}表示“#重复1到3次”。

贪婪

现在请注意,默认情况下正则表达式重复是 greedy :如果可能,它会尝试匹配更多。这由以下说明:

System.out.println(
    "# one ## two ### three #### four"
        .replaceAll("#{2,3}", ":")
);
//  ": one : two : three :# four"

请注意,####已替换为:#。这是因为第一次替换是第3次,只留下1次。如果#{2,3}第一次只花了2 #,那么第二次就会有另外#,但由于它是贪婪,所以花了3 {{ 1}}第一次,让它没有机会接受最后一次#

第一

现在让我们尝试另一个例子如下:

#

现在假设我们只希望将第一个System.out.println( "=====5====4===3==2=1" .replaceAll("={1,4}", ":") ); // "::5:4:3:2:1" 匹配替换为={1,4}

":"

瞧!一切都按预期工作!

现在让我们看看下一个例子:

System.out.println(
    "=====5====4===3==2=1"
        .replaceFirst("={1,4}", ":")
);
//  ":=5====4===3==2=1"

替换仍然在做它应该做的事情,但我们假设我们只在字符串的开头匹配System.out.println( "0=====5====4===3==2=1" .replaceFirst("={1,4}", ":") ); // "0:=5====4===3==2=1" 。对我们来说幸运的是,正则表达式有一种表达方式:我们可以锚定字符串开头的模式,用={1,4}表示。

^

瞧!一切都按预期工作!


回到答案

现在我们有足够的信息来回答原来的问题!

System.out.println(
    "0=====5====4===3==2=1"
        .replaceFirst("^={1,4}", ":")
);
//  "0=====5====4===3==2=1"

System.out.println(
    "=====5====4===3==2=1"
        .replaceFirst("^={1,4}", ":")
);
//  ":=5====4===3==2=1"

System.out.println(
    "===3==2=1"
        .replaceFirst("^={1,4}", ":")
);
//  ":3==2=1"

因此模式stringArray[i] = stringArray[i].replaceFirst("^ {1,4}", ""); 表示:

  • 使用^ {1,4} ...
  • 锚定在字符串的开头
  • ...介于1到4个空格字符之间,如果可能,请更多

然后我们用空字符串替换第一次出现这种匹配,基本上将其删除。


更多学习资源

这是初学者对正则表达式基础知识的介绍。这个奇妙的世界还有许多方面还没有被探索过。

参考

相关问题

  • 最终来