有没有更简单的方法来分割/重建一个字符串?

3

目前我正在使用String.split(""),像这样:

String[] tmp = props.get(i).getFullName().split("\\.");
String name = "";
for(int j = 1; j < tmp.length; j++){
    if(j > 1){
        name = name + "." + tmp[j];
    }
    else
        name = name + tmp[j];
}

我的字符串格式为first.second.third...n-1.n,我只需要去掉first.就可以了。

2个回答

8

我会使用

String s = "first.second.third...n-1.n";
s = s.substring(s.indexOf('.')+1);
// or
s = s.replaceFirst(".*?\\.", "");
System.out.println(s);

打印
second.third...n-1.n

@Baz 是时候休息一下了。 ;) - Peter Lawrey
看起来不错。我有一段时间没有用正则表达式了,你能解释一下 (".*?\\.", "") 吗? - Phox
2
@DVK replaceFirst(".*\\.", "") 确实会导致贪婪行为,并打印出 n...但是 ? 字符将其转换为不同的量词,具有怯懦的行为。基本上,*? 本身就是一个单一的量词怯懦 *),而不是两个分开的量词(不是 * + "一次或根本没有")。 - CosmicGiant

4
您可以使用java.util.regex并执行正则表达式来实现。
匹配first.的正则表达式为^[^.]+[.]
String s = "first.second.third...n-1.n";
s.replaceAll('^[^.]+[.]', '');

我上了一个正则表达式课程,但之后好像什么都忘了。我想我需要再多读一些资料。 感谢您的快速回复。 - Phox
@Phox - 我主要使用Perl进行开发(职业上)。当你经常使用正则表达式时,它们会变得很容易(故意使用双关语)。 - DVK
是的,我写过很少的Perl代码(我认为可能是正则表达式课程或后续课程),它们非常强大。 - Phox
我不确定,但我认为,在需要删除明确定义分隔符之前的整个文本的情况下,使用“子字符串”方法比使用正则表达式更快。在这种情况下,Peter的第一个解决方案在速度上只会输给自定义编码函数。 - CosmicGiant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接