我在将字符串转换为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';
我该怎么办? 有人请帮忙!!!!
答案 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个运算符:+ - * /
。如果需要,添加更多。
答案 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);
}
}