我有以下内容:
我想将5存储在数据中,将*存储在opr
中任何想法怎么做? 因为我知道如果字符串只包含Integer然后我将拆分并解析它但在这种情况下String包含int和char
输入:
字符串输入= 5 *;
我想输出将是这样的:
this.opr = *
this.data = 5
答案 0 :(得分:1)
实现这一目标的简单方法(如果您不想使用 Regex )就是这样做:
String temp ="";
// read every char in the input String
for(char c: input.toCharArray()){
// if it's a digit
if(Character.isDigit(c)){
temp +=c; // append it
}
else{ // at the end parse the temp String
data = Integer.parseInt(temp);
opr = c;
break;
}
}
//test
System.out.println("Input: " + input
+ "\t Data: " + data
+ "\t Opr: " + opr);
<强>测试强>
Input: 5* Data: 5 Opr: *
Input: 123* Data: 123 Opr: *
答案 1 :(得分:0)
在可疑的假设下,问题是以数字形式解析String
后跟op,这段代码将达到预期的结果。
public static void main(String[] args)
{
final String input = "5*";
int data = -1;
String op = "";
Pattern pat = Pattern.compile("([\\d]+)[\\s]*(.*)");
Matcher m = pat.matcher(input);
if (m.matches() && m.groupCount() == 2) {
data = Integer.parseInt(m.group(1));
op = m.group(2).trim();
}
System.out.printf("%2d with op %s%n", data, op);
}
输出:
5与op *
答案 2 :(得分:0)
String input = 5*;
char[] splitted = input.toCharArray();
char opr = splitted[1];
int data = Character.getNumericValue(splitted[0]);
答案 3 :(得分:0)
你也可以尝试使用3种不同的输入,如下所示。对于错误的DATA,它将打印0,对于不正确的OPERAND,它将打印为空白。
String input = "5*";
//String input = "109/";
//String input = "109b3*";
int data = 0;
char opr = ' ';
int len = input.length();
if ( len > 1 ) {
String data_s = input.substring(0, len - 1);
try {
data = Integer.valueOf(data_s).intValue();
} catch(Exception e) {
}
opr = input.substring(len - 1). charAt(0);
if ( opr != '+' && opr != '-' && opr != '*' && opr != '/' ) {
opr = ' ';
}
}
System.out.println("Input:" + input + " Data:" + data + " Opr:" + opr);