如何将String转换为String数组(此字符串包含减号)

时间:2011-12-13 01:06:57

标签: java arrays

有一个

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]

5 个答案:

答案 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;]。