我有一个循环的字符串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;
}
谢谢!
答案 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}
... 然后我们用空字符串替换第一次出现这种匹配,基本上将其删除。
这是初学者对正则表达式基础知识的介绍。这个奇妙的世界还有许多方面还没有被探索过。