如何在java中第二次出现点(。)后拆分字符串

时间:2018-02-02 08:11:38

标签: java string

我有一个看起来像这样的字符串(最基本的形式):

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"

4 个答案:

答案 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);
}