2 votes

Diviser les nombres entre parenthèses en Java

J'aimerais diviser ces données : 12132002(177) 012(207.5) 014(184) en deux tableaux, comme suit :
num[500] = 12132002,012,014, etc. y mark[500] = 177,207.5,184, etc.

Le fait est que j'accepte des valeurs de l'utilisateur comme ceci, où je ne connais pas le nombre total qu'il/elle va entrer.

Comment puis-je coder en Java ce type de fractionnement ? Est-ce que c'est comme ça ?

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

1voto

MasterBlaster Points 834

Pour coder "ce genre de fractionnement", vous devrez :

  1. Déclarez vos variables : String[] number , String[] mark , String num y String[] numSplit .
  2. Séparer num por " " (espaces). L'attribuer à numSplit .
  3. Boucle à travers numSplit de 0 a numSplit.length con i .
  4. Set (jeu de mots) number[i] a numSplit[i] du début à la première occurrence d'un "(" .
  5. Set (jeu de mots) mark[i] a numSplit[i] à partir d'un caractère après la première occurrence de "(" jusqu'à un caractère avant la fin.
  6. Sortie number y mark

Le code complet :

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

Quelles sont les sorties :

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

Notez que number , mark y numSplit sont String car les zéros initiaux seraient coupés dans le cas contraire. Si vous n'avez pas d'objection à ce que les zéros initiaux soient coupés, vous pouvez modifier la valeur de num à un int et mark à un double (En raison de la décimale dans 207.5 ).

1voto

Brandzo Points 36

Ok mon pote, ceci pourrait être une solution à ton problème. J'ai choisi d'utiliser les méthodes que j'ai déjà créées pour un autre projet, mais je pense qu'elles peuvent également convenir à cet objectif, au lieu d'utiliser une expression REGEX complexe. Le résultat est bon, bien que tu doives trouver la façon dont tu veux stocker les variables num et mark (je suggère des tableaux). J'espère que j'ai aidé.

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

1voto

DigitShifter Points 19

Essayez ceci :

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

}

Sortie :

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X