0

文字列を char 配列に変換しているときに問題が発生しました... 私の問題は次のとおりです:-

String str="2+32*2";  
char a[]=new char[str.length()];  
str.getChars(0,str.length,a,0);  

私の配列は次のようになります:-

a[0]='2';  
a[1]='+';  
a[2]='3';  
a[3]='2';  
a[4]='*';  
a[5]='2';  

しかし、私はその配列が次のようになる必要があります:-

a[0]='2';  
a[1]='+';  
a[2]='32';  
a[3]=' *';  
a[4]='2';  

私は何をしなければなりませんか?誰か助けてください!!!!

4

5 に答える 5

2

'32' は 1 文字ではなく 2 文字であるため、これは実行できません。

Strings の ArrayList を作成し、StringTokenizer クラスを使用して各トークンを取得できます: http://www.java-samples.com/showtutorial.php?tutorialid=236

String val;
ArrayList<String> values = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(str, "+*", true);   // Put the delimiters that you want
while(st.hasMoreTokens()) { 
    val = st.nextToken(); 
    values.add(val);
} 

(その例は試していませんが、うまくいくと思います)

于 2012-12-24T10:47:33.443 に答える
0

編集を参照してください:

package SO;

public class aa {

    public static void main(String[] args) {
    String inputString = "2+32*2-3/3";
    char[] inputCharArray = inputString.toCharArray();
    char[][] finalSplittedArray = new char[100][2];
    int rowCounter = 0;
    int colCounter = 0;
    for (char inputChar : inputCharArray) {
        if (inputChar == '+' || inputChar == '-' || inputChar == '*' || inputChar == '/') {
        rowCounter++;
        finalSplittedArray[rowCounter][0] = inputChar;
        colCounter = 0;
        rowCounter++;
        } else {
        finalSplittedArray[rowCounter][colCounter] = inputChar;
        colCounter++;
        }

    }

    for (char[] cc : finalSplittedArray) {
        for (char c : cc)
        System.out.print(c);
        System.out.println();
    }
    }
}

基本的に、演算子に基づいて文字列を分割する必要があります。ここでは、4つの演算子を検討しました:+ - * /。必要に応じてさらに追加します。

デモ

于 2012-12-24T10:52:47.523 に答える
0

これはどう?

import java.util.*;
import java.lang.*;
import java.util.StringTokenizer;

class Main {
    public static void main (String[] args) throws java.lang.Exception {
        String str="2+32*2-7/5";
        ArrayList<String> arr = new ArrayList<String>();
        StringTokenizer st = new StringTokenizer(str, "+-*/", true);
        while(st.hasMoreTokens()) { 
                arr.add(st.nextToken());
        }
        System.out.print(arr);
    }
}

デモ

于 2012-12-24T11:28:05.010 に答える
0

を使用できますCharacter.isDigit(a[i])
ただし、1 文字を 1 文字より長くすることはできないため、文字列の配列を作成する必要があります。

私は提案します:

ArrayList<String> arrList = new ArrayList<String>();
char[] a = str.toCharArray();

for (int i = 0; i < a.length; i++) {
    String s = "";
    s.append(a[i]);
    if(Character.isDigit(a[i+]1)) {
        i++;
        s.append(a[i]);
    }
    arrList.add(s);
}
于 2012-12-24T10:51:25.497 に答える
0

したがって、入力を複数の String オブジェクト (char 配列ではなく) にトークン化する必要があるようです。Scannerオブジェクトは、まさにこの種のトークン化を目的としています。または、 LL(1) パーサーをハンドロールしてこれを行うこともできます。結局のところ、おそらく次のようなインターフェースが必要になるでしょう。

public interface ExpressionTokenizer {
   Iterable<Token> tokenizeExpression(String expression);
}

ここで「トークン」を使用するのは、おそらく「2」、「32」、および「2」を文字列として表現するのではなく、既に解析された「intValue()」を持つ「IntegerToken」として表現したいからです。整数に。

開始に役立つ疑似コードを次に示します。

if next_char is a digit:
   tokenize as integer literal
   update state
   return

if next_char is in {'+', '-', '*', '/'}
   tokenize as numeric operator
   update state
   return

tokenize as error
于 2012-12-24T10:58:06.220 に答える