【问题标题】:Java ordinary programmingJava普通编程
【发布时间】:2012-12-24 10:41:45
【问题描述】:

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

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

【问题讨论】:

    标签: arrays string type-conversion to-char


    【解决方案1】:

    你不能这样做,因为 '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);
    } 
    

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

    【讨论】:

      【解决方案2】:

      您可以使用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);
      }
      

      【讨论】:

        【解决方案3】:

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

        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
        

        【讨论】:

          【解决方案4】:

          这个怎么样?

          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

          【讨论】:

            【解决方案5】:

            见编辑:

            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

            【讨论】:

            • 这不是 OP 想要的……你可能在附近,但这不是 OP 想要的
            • @FahimParkar :那他想要什么?
            • 在您的情况下,OP 需要的输出是 2、+、32、*、2、-、3、/、3。OP 也需要数组中的算术运算符。
            • 为什么数组末尾有这么多空白?看看here
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-04
            • 1970-01-01
            • 2011-09-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多