有一个
String temp = "M0-1"
如何将此String转换为String []?
如果输出新的String数组,结果应为:
String[] newStringArray;
newStringArray[0] = M;
newStringArray[1] = 0;
newStringArray[2] = -1;
新String数组的最后一个元素应该是“-1”,这意味着“-1”将被视为一个整体,而不是“ - ”和“1”。
我尝试使用String.split(“”)解析此字符串,但只得到一个像这样的String数组:
String[] newStringArray;
newStringArray[0] = M;
newStringArray[1] = 0;
newStringArray[2] = -;
newStringArray[3] = 1;
更新:字符串56应为[5,6],-10应为[-1,0]
答案 0 :(得分:6)
这个split()
会这样做:
String[] array = temp.split("(?<=[^-])");
当前一个角色不 a -
那个奇怪的正则表达式被称为 look-behind 。它的语法是(?<=regex)
,这是一个非捕获断言,前面的输入匹配指定的正则表达式,在这种情况下是[^-]
,这意味着“任何不是减号的字符”。 / p>
这种断言有4个版本:
(?=regex)
是积极向前看,这意味着下一个输入必须与regex
匹配(?!regex)
是负向前瞻,这意味着下一个输入不得与regex
匹配(?<=regex)
背后的正面看法,意味着前面的输入必须与regex
匹配(?<!regex)
是背后的负面看法,这意味着nepreceedingxt输入不得与regex
匹配这是一个测试:
public static void main(String[] args) {
String temp = "M0-1";
String[] newStringArray = temp.split("(?<=[^-])");
System.out.println(Arrays.toString(newStringArray));
}
输出:
[M, 0, -1]
答案 1 :(得分:0)
好。我看到了你的编辑。
如果你真的想要一个数组,那么你必须事先确定大小:
int finalSize = 0;
for(int i = 0; i < temp.size(); i++) {
Character curr = new Character(temp.charAt(i));
if(curr.isLetter() || curr.isDigit()) {
finalSize++;
}
}
然后你可以把东西放在数组中:
String[] tempArray = new String[finalSize];
int index = 0;
String splicer = "";
for(int i = 0; i < temp.size(); i++) {
Character curr = new Character(temp.charAt(i));
splicer += curr; // Adds the current character to the current String.
if(curr.isLetter() || curr.isDigit()) { // If it's a digit or a letter,
temp[index] = splicer; // then you'll store the current String
splicer = ""; // Reset the current String.
index++; // And move on to the next index.
}
}
这是你需要的吗?
答案 2 :(得分:0)
我对你实际需要的逻辑类型进行了一些严肃的信念,因为你只给了我们一个字符串来构建逻辑,而不是你想要的标准格式,如果这不适合你的格式,请给我们您想要转换为String []的更多示例字符串,您可以调整逻辑以使其适合您的字符串格式。
String string = "M0-1";
char[] charArray = string.toCharArray();
List<String> stringArrayList = new ArrayList<String>();
for(int x = 0; x < charArray.length; x++){
String currentString = Character.toString(charArray[x]);
if(currentString.contains("-")){
stringArrayList.add(currentString + Character.toString(charArray[x + 1]));
x++;
continue;
}
stringArrayList.add(currentString);
}
String[] stringArray = new String[stringArrayList.size()];
stringArrayList.toArray(stringArray);
System.out.println(stringArray);
此逻辑将分隔所有字符,除非它们前面带有“ - ”,如果是,它将包含“ - ”后面的1个字符。正如我上面所说,我从你提供的信息中获得了一些大的信念,用更多细节更新问题,我相信我们可以提供更多帮助。
答案 3 :(得分:0)
也许您可以使用正则表达式来执行此操作。使用正则表达式获取String的尾数,并使用substring方法吐出String两部分,如下所示:
public static void main(String[] args){
String temp = "M0-1";
String regexp = "\\-?\\d+$";
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(temp);
matcher.find();
String[] result = {temp.substring(0,temp.indexOf(matcher.group())),
temp.substring(temp.indexOf(matcher.group()),temp.length())};
System.out.println(result[0]);
System.out.println(result[1]);
}
答案 4 :(得分:0)
或者你可以这样做。
String sample = "M0-1e-2f-gh-";
char[] chars = sample.toCharArray();
List<String> newArray = new ArrayList<String>();
for (int i = 0; i < chars.length; i++) {
// second test case is to avoid index out of bounds exception during append
if (chars[i] == '-' && (i+1) < chars.length) {
newArray.add("-" + chars[i+1]); // append the next element
i++; // skip the next element because it's already been appended
} else {
newArray.add("" + chars[i]);
}
}
// toArray() returns an array of type Object[] so pass a new String[] object,
// put the ArrayList elements there, then return as String[]
String[] results = newArray.toArray(new String[newArray.size()]);
results[]
应该包含[&#34; M&#34;,&#34; 0&#34;,&#34; -1&#34;,&#34; e&#34;,&# 34; -2&#34;,&#34; f&#34;,&#34; -g&#34;,&#34; h&#34;,&#34; - &#34;]。