Java普通编程

时间:2012-12-24 10:41:45

标签: arrays string type-conversion to-char

我在将字符串转换为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';  

我该怎么办? 有人请帮忙!!!!

5 个答案:

答案 0 :(得分:2)

你不能这样做,因为'32'不是char,而是两个chars。

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

(我没试过那个例子,但我认为它会起作用)

答案 1 :(得分: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);
}

答案 2 :(得分: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个运算符:+ - * /。如果需要,添加更多。

Demo

答案 3 :(得分:0)

因此,听起来您想将输入标记为多个String对象(而不是char数组)。 Scanner对象仅用于此类标记化。或者,您可以手动滚动LL(1) parser来执行此操作。在一天结束时,您可能希望拥有这样的界面:

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

我在这里使用“Token”,因为您可能不希望将“2”,“32”和“2”表示为String,而是将“IntegerToken”表示为“intValue()”已被解析为整数。

以下是一些帮助您入门的伪代码:

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

答案 4 :(得分: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);
    }
}

Demo