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' 不是一个字符,而是两个字符。

您可以创建字符串的 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

这个怎么样?

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

因此,听起来您想将输入标记为多个 String 对象(而不是 char 数组)。Scanner对象正是用于这种标记化的。或者,您可以手动滚动LL(1) 解析器来执行此操作。归根结底,您可能希望拥有这样的界面:

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

我在这里使用“Token”,因为您可能不想将“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 回答
0

你可以使用Character.isDigit(a[i]).
但是,一个字符不能长于一个字符,因此您必须创建一个字符串数组。

我建议:

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

见编辑:

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 回答