如何使用split方法将字符串拆分为“。”

时间:2015-02-15 10:00:03

标签: java

我知道使用split()函数来分割字符串。但我对分裂以下字符串感到困惑。 例如:

 String str="com.mgnt.util.DateTimeTokenizer.setEndDateTimeValues=90027";
    String[] str=line.split("\\.", 3);
    for(int i=0;i<=str.length-1;i++)
    {
        System.out.println(str[i]);
    }

上面的代码显示输出,如

com
mgnt
util.DateTimeTokenizer.setEndDateTimeValues=90027

但是,我不想要上面的输出。我想要输出如下

com.mgnt.util
DateTimeTokenizer.setEndDateTimeValues=90027

我不知道如何使用拆分功能,请告诉我如果你有想法。

5 个答案:

答案 0 :(得分:1)

很明显,他试图将包名和剩下的内容分开(可能是类名后的&#34;表达式并不总是强制性的)&#34;。

依靠点不是一个好方法

我建议:

String str="com.mgnt.util.DateTimeTokenizer.setEndDateTimeValues=90027";
System.out.println(Arrays.toString(str.split("\\.(?=\\p{Upper})")));

这将用点后跟一个大写字符分开,如果遵循Java命名约定将会有效。

答案 1 :(得分:0)

您似乎正在像line.split("\\.", 3);那样分裂,希望它会将您的输入字符串com.mgnt.util.DateTimeTokenizer.setEndDateTimeValues=90027拆分为3第三个点,以便返回两个令牌:{{1} }和com.mgnt.util

但是,这不是第二个参数的作用。它实际上指定了结果数组大小的限制。因此,通过将其限制为DateTimeTokenizer.setEndDateTimeValues=900273将您的字符串拆分为前两个点(为了给您split()com)并留下字符串的其余部分{{ 1}}作为数组中的第3个元素。

现在,假设您的输入字符串始终是一个完全限定的类名,后跟一个方法名,您可以使用正则表达式并将mgnt字符串作为

util.DateTimeTokenizer...

上面的正则表达式将字符串拆分为一个点,然后输入中只有一个点。

输出:

split()

答案 2 :(得分:0)

试试这个:System.out.println(java.util.Arrays.toString(str.split("(?<=\\....)")));

基本上它在第三个点分裂。这就是“......”的作用。

答案 3 :(得分:0)

您需要将包和类名与方法分开。虽然根据java doc的split method带整数意味着

The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array's length will be no greater than n, and the array's last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded. 

您需要的是:

String str = "com.mgnt.util.DateTimeTokenizer.setEndDateTimeValues=90027";
int lastIndexOfDot = str.lastIndexOf(".");//grab index where your method name starts
int secondLastIndexOfDot = str.substring(0, lastIndexOfDot - 1).lastIndexOf(".");//grab the index from where class name starts
System.out.println("My package is " + str.substring(0, secondLastIndexOfDot));//now using substring find the package
System.out.println("My class and method is " + str.substring(secondLastIndexOfDot + 1));//and class along with method name
Output:
My package is com.mgnt.util
My class and method is DateTimeTokenizer.setEndDateTimeValues=90027

答案 4 :(得分:0)

如果你想使用split函数,你应该这样做(使用字符串连接):

String str = "com.mgnt.util.DateTimeTokenizer.setEndDateTimeValues=90027";
String[] arr = str.split("\\.");
int dotIndex = 2; // start from 0
String first = "";
String second = "";

for (int i = 0; i < arr.length; i++)
{
    if (i < dotIndex)
          first += arr[i] + ".";
    else if (i == dotIndex)
          first += arr[i];
    else if (i < arr.length - 1)
          second += arr[i] + ".";
    else 
          second += arr[i];
}
System.out.println(first);
System.out.println(second);

不是很干净,但是有效。