2016-06-30 5 views
2

Я хотел бы разделить этот вход: 12132002(177) 012(207.5) 014(184) в два массива, например:
num[500] = 12132002,012,014, etc. и mark[500] = 177,207.5,184, etc.Split Числа в круглых скобках в Java

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

Как я могу кодировать на Java такое разбиение? Это так?

int number[500]; 
for(int i=0;i<500;i++) { 
    number=num.split("//("); 
} 
+0

'int' не может справиться с числами с плавающей точкой. –

ответ

1

код "такого рода расщепления", вы должны:

  1. Объявите переменные: String[] number, String[] mark, String num и String[] numSplit.
  2. Сплит num от " " (пробелы). Назначьте это numSplit.
  3. Петля numSplit от 0 до numSplit.length с i.
  4. Комплект number[i] до numSplit[i] от начала до первого вхождения "(".
  5. Комплект mark[i] до numSplit[i] от одного символа после первого появления "(" до одного символа до конца.
  6. Выход number и mark

Полный код:

String[] number = new String[500]; //1 
String[] mark = new String[500]; 
String num = "12132002(177) 012(207.5) 014(184)"; 
String[] numSplit = num.split(" "); //2 

for(int i = 0; i < numSplit.length; i++) { //3 
    number[i] = numSplit[i].substring(0, numSplit[i].indexOf("(")); //4 
    mark[i] = numSplit[i].substring(numSplit[i].indexOf("(") + 1, numSplit[i].length() - 1); //5 
} 

for(int i = 0; i < number.length; i++) System.out.println(number[i]); //6 
for(int i = 0; i < mark.length; i++) System.out.println(mark[i]); 

Какие выходы:

12132002 
012 
014 
null (x497) 
177 
207.5 
184 
null (x497) 

Обратите внимание, что number, mark и numSplit являются String массивы, так как ведущие нули бы быть отрезанными в противном случае. Если вы не против, чтобы ведущие нули были обрезаны, вы можете изменить num на массив int и mark на массив double (из-за десятичного числа в 207.5).

+0

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

+0

Я принимаю num как int int = Integer.parseInt (no.getText(). Trim()); здесь в этом коде String [] numSplit = num.split (""); // 2 это делает меня ошибкой @MasterBlaster –

+0

Работал как шарм Спасибо вам столько .............. :) –

1

Хорошо, это может быть решением вашей проблемы. Я решил использовать методы, которые я уже создал для какого-то другого проекта, но я думаю, что они могут поместиться и для этой цели, вместо использования некоторого сложного выражения REGEX. Результат хорош, хотя вам нужно выяснить, как вы хотите хранить переменные num и mark (я предлагаю массивы). Надеюсь, я помог.

public class Example { 
    public static void main(String[] args) { 
     String s = "12132002(177)012(207.5)014(184)"; 

     // output 12132002,012,014 && 177,207.5,184 
     // it works good with this string as well -> s = "12132002(177)012(207.5)014(184)111(024)"; 
     int numOfParanthesis = numOfParanthesis(s, '('); 
     String num = ""; 
     String mark = ""; 
     // array which contains positions of (
     int[] indexesOpening = indexes(s, '('); 
     // array which contains positions of) 
     int[] indexesClosing = indexes(s, ')'); 
     // logic 
     for(int i = 0; i < numOfParanthesis; i++){ 
      if(i == 0){ 
       num = s.substring(i, indexesOpening[i])+","; 
       mark = s.substring(indexesOpening[i]+1,indexesClosing[i])+","; 

      }else if(i!=numOfParanthesis-1){ 
       num += s.substring(indexesClosing[i-1]+1, indexesOpening[i])+","; 
       mark += s.substring(indexesOpening[i]+1, indexesClosing[i])+","; 
      }else{ 
       num += s.substring(indexesClosing[i-1]+1, indexesOpening[i]); 
       mark += s.substring(indexesOpening[i]+1, indexesClosing[i]); 
      } 
     } 
     System.out.println(num); 
     System.out.println(mark); 
    } 

    // returns array of positions for the given character 
    public static int[] indexes(String s, char c){ 
     int numOfParanthesis = numOfParanthesis(s, c); 
     int[] indexes = new int[numOfParanthesis]; 
     int delimetar = s.indexOf(c); 
     for(int i = 0; i < numOfParanthesis; i++){ 
      if(i != -1){ 
       indexes[i] = delimetar;  
      } 
      delimetar = s.indexOf(c, delimetar+1); 
     } 
     return indexes; 
    } 

    // returns how many times a character repeats in a string 
    public static int numOfParanthesis(String s, char c){ 
     int number = s.indexOf(c); 
     int i = 0; 
     while (number >= 0){ 
      number = s.indexOf(c, number+1); 
      i++; 
     } 
     return i; 
    } 
} 
1

Попробуйте это:

public class Test { 

    public static void main(String[] args) { 
     // Guess this is a string since it is a mix of integers 
     // and non-integers, characters like '(', ')' and space. 
     String str = "12132002(177) 012(207.5) 014(184)"; 

     System.out.println("Your string:"); 
     System.out.println("str=\"" + str + "\""); 
     System.out.println(); 

     // remove all ')' since they will not be used 
     // using space as a delimiter is enough 
     String str2 = str.replaceAll("\\)", ""); 

     System.out.println("Your string after removing ')' character:"); 
     System.out.println("str2=\"" + str2 + "\""); 
     System.out.println(); 

     // Since your input has spaces, we split on spaces 
     String[] strings = str2.split("\\s+"); 

     System.out.println("Result after splitting str2 by spaces:"); 
     for (String s : strings) { 
      System.out.println(s); 
     } 
     System.out.println(); 

     // Lets make two array 
     String[] num = new String[500]; 
     String[] mark= new String[500]; 

     // loop strings 
     int cnt = 0; 
     for (String s : strings) { 
      String[] a = s.split("\\("); // a[0]="012", a[1]="207.5" 
      num[cnt] = a[0]; 
      mark[cnt] = a[1]; 
      cnt++; 
     } 

     System.out.println("Result num: "); 
     System.out.print("num[500] = "); 
     for(String s : num) { 
      if(s==null) {break;} 
      System.out.print(s + ","); 
     } 
     System.out.println(" etc.\n"); 

     System.out.println("Result mark: "); 
     System.out.print("mark[500] = "); 
     for(String s : mark) { 
      if(s==null) {break;} 
      System.out.print(s + ","); 
     } 
     System.out.println(" etc.\n"); 
    } 

} 

Выходные:

Your string: 
str="12132002(177) 012(207.5) 014(184)" 

Your string after removing ')' character: 
str2="12132002(177 012(207.5 014(184" 

Result after splitting str2 by spaces: 
12132002(177 
012(207.5 
014(184 

Result num: 
num[500] = 12132002,012,014, etc. 

Result mark: 
mark[500] = 177,207.5,184, etc.