我有一个看起来像这样的字符串(最基本的形式):
String str = "1.0.0.190"
str也可以是这样的:
1.11.0.12 or 2.111.1.190 or 1.0.0.0
我想在第二次出现点(。)时拆分字符串。我怎样才能做到这一点?
输出:
String str = "1.0.0.190"
String output = "1.0"
答案 0 :(得分:3)
我对OP水平的答案是合适的,所以我不会向他推荐分裂或正则表达式......
如果您需要子串到第二个点,只需找到第二个点并将字符串剪切到该位置......
public class DotSubstring {
public static void main(String[] args) {
String s = "1.2.3.4";
int secondDotPosition = findSecondDotPosition(s);
if (secondDotPosition > 0) {
System.out.println(s.substring(0, secondDotPosition));
} else {
System.out.printf("ERROR: there is not a 2nd dot in '%s'%n", s);
}
}
private static int findSecondDotPosition(String s) {
int result = -1;
int dotsToFind = 2;
char[] ca = s.toCharArray();
for (int i = 0; i < ca.length; ++i) {
if (ca[i] == '.') --dotsToFind;
if (dotsToFind == 0) return i;
}
return result;
}
}
初学者分裂的问题是,接受正则表达式,这就是为什么它在Joop Eggen的回复中被转义为str.split("\\.")
。
是的,这可以在一行中实现,因为user3458271在回答中与xyz相同的注释中写道,只是错误检查会更困难(例如,如果没有2个点......)。
答案 1 :(得分:2)
在substring和indexOf的一行中:
String output = str.substring(0,str.indexOf(".",str.indexOf(".")+1));
答案 2 :(得分:1)
对于其他领域:
String[] halfs = str.split("\\.");
String[] fulls = new String[halfs.length / 2];
for (int i = 0; i < fulls.length; ++i) {
fulls[i] = halfs[2*i] + "." + halfs[2*i + 1];
}
return fulls[0];
第一个领域减少了相同的技术:
String[] halfs = str.split("\\.", 3);
return halfs[0] + "." + halfs[1];
简单地:
return str.replaceAll("^([^.]*\\.[^.]*)\\..*$", "$1");
答案 3 :(得分:1)
public static void main(String[] args) {
String input = "2.111.1.190";
String[] out = input.split("\\.");
String output1 = out[0]+"."+out[1];
System.out.println(output1);
String output2 = "";
for(int x=2; x < out.length; x++)
output2 += out[x] +".";
System.out.println(output2);
}