1

次のアルゴリズムを機能させようとしています。私がやりたいのは、指定された文字列を一連の数字または演算子のいずれかで構成される部分文字列に分割することです。

したがって、この文字列 = "22+2" の場合、[0]="22" [1]="+" および [2]="2" の配列が得られます。

これは私がこれまでに持っているものですが、インデックスが範囲外の例外を受け取ります:

public static void main(String[] args) {
    String string = "114+034556-2";
    int k,a,j;
    k=0;a=0;j=0;
    String[] subStrings= new String[string.length()];

    while(k<string.length()){
        a=k;
        while(((int)string.charAt(k))<=57&&((int)string.charAt(k))>=48){
            k++;}
        subStrings[j]=String.valueOf(string.subSequence(a,k-1)); //exception here

        j++;
        subStrings[j]=String.valueOf(string.charAt(k));
        j++;

   }}

代替案を提示されるよりも、自分の推論の何が問題なのかを教えてもらいたいと思っていますが、もちろん、どんな種類の助けにも感謝します.

4

5 に答える 5

1

正規表現を使用して、先読みおよび後読みアサーションを使用して演算子から数値を分割できます

String equation = "22+2";
String[] tmp = equation.split("(?=[+\\-/])|(?<=[+\\-/])");
System.out.println(Arrays.toString(tmp));
于 2013-10-08T00:35:45.083 に答える
0

基準が単に「数値ではないもの」である場合、並列配列を使用してもかまわない場合は、いくつかの単純な正規表現を使用できます-

String[] operands = string.split("\\D");\\split around anything that is NOT a number
char[] operators = string.replaceAll("\\d", "").toCharArray();\\replace all numbers with "" and turn into char array.
于 2013-10-08T00:35:22.770 に答える
0
String input="22+2-3*212/21+23";
     String number="";
     String op="";
     List<String> numbers=new ArrayList<String>();
     List<String> operators=new ArrayList<String>();
     for(int i=0;i<input.length();i++){
         char c=input.charAt(i);
         if(i==input.length()-1){
             number+=String.valueOf(c);
             numbers.add(number);
         }else if(Character.isDigit(c)){
             number+=String.valueOf(c);
         }else{
              if(c=='+' || c=='-' || c=='*' ||c=='/'){
             op=String.valueOf(c);
             operators.add(op);
             numbers.add(number);
             op="";
             number="";
             }
         }
     }
     for(String x:numbers){
         System.out.println("number="+x+",");
     }
     for(String x:operators){
         System.out.println("operators="+x+",");
     }

これは出力になります number=22,number=2,number=3,number=212,number=21,number=23,operator=+,operator=-,operator=*,operator=/,operator=+,

于 2013-10-08T00:41:27.117 に答える