使用String.split()访问数值

时间:2010-08-31 07:51:06

标签: java split

我尝试了很多,但无法得到解决方案,所以我在寻求帮助。

我有一个字符串String input="---4--5-67--8-9---";

现在我需要转换成一个字符串数组,它看起来像:

String [][]output={{4},{5},{67},{8},{9}};

我尝试使用split()和

java.util.Arrays.toString("---4--5-67--8-9---".split("-+")

但找不到想要的答案。那该怎么办?

实际上我需要4,5,67,8,9的值。但我不知道如何找到它们。我会将值视为整数以进行进一步处理

8 个答案:

答案 0 :(得分:5)

String[] numbers = "---4--5-67--8-9---".split("-+");
String[][] result = new String[numbers.length][1];
for (int i = 0; i < numbers.length; i++) {
    result[i][0] = numbers[i];
}

更新:要删除初始空值,您可以获得输入的子字符串,如:

int startIdx = 0;
char[] chars = input.toCharArray();
for (int i = 0; i < chars.length; i ++) {
    if (Character.isDigit(chars[i])) {
        startIdx = i;
        break;
    }
}
input = input.substring(startIdx);

(或者您可以稍后处理它们时检查它们是否为空(String.isEmpty())。)

答案 1 :(得分:4)

首先,这是您的问题的答案。此代码将生成一个二维数组,其中每个元素都是一个由单个数字字符串组成的数组。

final String input = "---4--5-67--8-9---";
// desired output: {{4},{5},{67},{8},{9}}

// First step: convert all non-digits to whitespace
// so we can cut it off using trim()
// then split based on white space
final String[] arrayOfStrings =
    input.replaceAll("\\D+", " ").trim().split(" ");

// Now create the two-dimensional array with the correct size
final String[][] arrayOfArrays = new String[arrayOfStrings.length][];

// Loop over single-dimension array to initialize the two-dimensional one
for(int i = 0; i < arrayOfStrings.length; i++){
    final String item = arrayOfStrings[i];
    arrayOfArrays[i] = new String[] { item };
}
System.out.println(Arrays.deepToString(arrayOfArrays));
// Output: [[4], [5], [67], [8], [9]]

但是,我认为你真正需要的是一个整数或整数数组,所以这是一个修订的解决方案:

final String input = "---4--5-67--8-9---";

// Convert all non-digits to whitespace
// so we can cut it off using trim()
// then split based on white space
final String[] arrayOfStrings =
    input.replaceAll("\\D+", " ").trim().split(" ");

// Now create an array of Integers and assign the values from the string
final Integer[] arrayOfIntegers = new Integer[arrayOfStrings.length];
for(int i = 0; i < arrayOfStrings.length; i++){
    arrayOfIntegers[i] = Integer.valueOf(arrayOfStrings[i]);
}
System.out.println(Arrays.toString(arrayOfIntegers));
// Output: [4, 5, 67, 8, 9]

// Or alternatively an array of ints
final int[] arrayOfInts = new int[arrayOfStrings.length];
for(int i = 0; i < arrayOfStrings.length; i++){
    arrayOfInts[i] = Integer.parseInt(arrayOfStrings[i]);
}
System.out.println(Arrays.toString(arrayOfInts));
// Output: [4, 5, 67, 8, 9]

是否使用Integer或int版本实际上取决于您是想要进行一些数学运算(int)还是需要一个对象引用(Integer)。

答案 2 :(得分:3)

String[] result = "---4--5-67--8-9---".split("-+");
int i;
for (i = 0; i < result.length; i++) {
    if (result[i].length() > 0) {
        System.out.println(result[i]);
    }
}

给我输出:

4
5
67
8
9

答案 3 :(得分:1)

public class split{
public static void main(String[] argv){
    String str="---4--5-67--8-9---";
    String[] str_a=str.split("-+");
}

}

这似乎对我有用。

答案 4 :(得分:1)

在这种情况下,使用正则表达式模式似乎更自然:

public class split {
     public static int[] main(String input) {

         ArrayList<String> list = new ArrayList() ;

         Pattern pattern = Pattern.compile("[0-9]") ;
         Matcher matcher = pattern.matcher(input) ;

         String match = null ;

             while(  ( match = matcher.find() )  ===  true  ) {
                 list.add(match) ;
             }

         String[] array = list.toArray(   new String[  ( list.size() )  ]()   ) ;

         return array ;

     }
}

答案 5 :(得分:1)

    String input="---4--5-67--8-9---";
    Scanner scanner = new Scanner(input).useDelimiter("-+");
    List<Integer> numbers = new ArrayList<Integer>();
    while(scanner.hasNextInt()) {
        numbers.add(scanner.nextInt());
    }
    Integer[] arrayOfNums = numbers.toArray(new Integer[]{});
    System.out.println(Arrays.toString(arrayOfNums));

答案 6 :(得分:1)

我认为以下内容非常简单,虽然它使用List和Integer数组,但这不是小字符串的开销:

为简单起见,我将返回单维数组,但可以轻松修改以返回所需的数组。但是从您的问题来看,您似乎只需要一个整数列表。

import java.util.*;

public class Test {

    public static void main(String[] args) throws Throwable {
         String input = "---4--5-67--8-9---";
         System.out.println(split(input).length); // 5
    }

    public static Integer[] split(String input) {
         String[] output = input.split("\\-+");
         List<Integer> intList = new ArrayList<Integer>(output.length);

         // iterate to remove empty elements
         for(String o : output)  {
            if(o.length() > 0)   {
               intList.add(Integer.valueOf(o));
            }
         }
         // convert to array (or could return the list itself
         Integer[] ret = new Integer[intList.size()];
         return intList.toArray(ret);
    }
}

答案 7 :(得分:1)

我可能迟到了,但我想我会给番石榴这个。

    String in = "---4--5-67--8-9---";

    List<String> list = Lists.newArrayList(Splitter.on("-").omitEmptyStrings().trimResults().split(in));
    System.out.println(list);
    // prints [4, 5, 67, 8, 9]