我知道使用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
我不知道如何使用拆分功能,请告诉我如果你有想法。
答案 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=90027
,3
将您的字符串拆分为前两个点(为了给您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);
不是很干净,但是有效。