2010-08-31 3 views
2

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

У меня есть строку String input="---4--5-67--8-9---";

Теперь мне нужно преобразовать в в массив строк, который будет выглядеть как:

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

я попытался с расколом() и

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

но не может найти нужный ответ. так что делать?

Фактически мне нужно значение 4,5,67,8,9.but, но я не уверен, как их найти. я буду рассматривать значения как целое для дальнейшей обработки

+3

Почему вы хотите массив массивов, если каждый подмассив содержит только один элемент? – locka

+0

На самом деле мне нужно значение 4,5,67,8,9.but, но я не уверен, как их найти. i будет обрабатывать значения как целочисленные для дальнейшей обработки – riyana

+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 
+0

, что на самом деле не является ответом на вопрос, хотя –

+0

@seanizer: Поскольку «массив» массива строк имеет желаемый контент, кроме пустых строк, я не согласен. – Key

+0

'отдельно от пустой пустой строки', точно. но, по-видимому, ваш лучший ответ с точки зрения OP в любом случае –

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]; 
} 

Update: избавиться от начального пустого значения, вы можете получить подстроку ввода, например:

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()) при их обработке позже.)

+0

возвращает '[[], [4], [5], [67], [8 ], [9]] '(в начале есть пустой массив) –

+0

да, спасибо. Я добавил обновление – Bozho

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) или задать ссылку на объект (Integer).

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

}

Это, кажется, работает для меня.

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 ; 

    } 
} 
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)); 
1

я думал следующее довольно прост, хотя он использует Список и Целочисленные массивы. Не то, чтобы накладные расходы для небольших строк:

Для простоты я возвращаю один размерный массив, но его можно легко модифицировать, чтобы вернуть массив. Но из вашего вопроса кажется, что вам просто нужен список целых чисел.

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

Возможно, я опоздал на вечеринку, но я решил, что даю guava взять на себя это.

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] 
Смежные вопросы