Использование String.split () для доступа к числовым значениям - PullRequest
2 голосов
/ 31 августа 2010

Я много пробовал, но не могу найти решение, поэтому прошу помощи.

у меня есть строка 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 ]

5 голосов
/ 31 августа 2010
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()) при последующей обработке).

4 голосов
/ 31 августа 2010

Во-первых, вот ответ на ваш вопрос.Этот код сгенерирует двумерный массив, в котором каждый элемент представляет собой массив, состоящий из одной числовой строки.

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).

3 голосов
/ 31 августа 2010
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
1 голос
/ 31 августа 2010

Я мог бы опоздать на вечеринку, но я решил, что это даст гуава.

    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]
1 голос
/ 31 августа 2010

Я подумал, что следующее довольно просто, хотя он использует массивы 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);
    }
}
1 голос
/ 31 августа 2010
    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));
1 голос
/ 31 августа 2010

Использование шаблона регулярного выражения кажется более естественным в этом случае:

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 ;

     }
}
1 голос
/ 31 августа 2010
public class split{
public static void main(String[] argv){
    String str="---4--5-67--8-9---";
    String[] str_a=str.split("-+");
}

}

Мне кажется, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...