我从cobol copybook中提取格式信息,需要使用switch或if语句来获取inside()中的值。所有值都在一个字符串数组中,我正在使用下面的示例值迭代数组。
X(37)
9(03)
X(15)
9(07)
X
X(1)
X(253)
我的开关案例
private int convertSize(String pic) {
switch (pic) {
case "X" :
return 1;
case "X("+ "string inside" +")" :
return Integer.parseInt("string inside");
case "9("+ "string inside" +")" :
return (Integer.parseInt("string inside")+1);
default:
return 0;
}
我应该用"字符串替换内容"得到结果? " \ d +"不会工作,因为它在数组中保存为字符串。
答案 0 :(得分:2)
你走了。完全单元测试...
package com.example;
import org.junit.Assert;
import org.junit.Test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Question28819604 {
@Test
public void test() {
Assert.assertEquals(37,convertSize("X(37)"));
Assert.assertEquals(4,convertSize("9(03)"));
Assert.assertEquals(15,convertSize("X(15)"));
Assert.assertEquals(8,convertSize("9(07)"));
Assert.assertEquals(1,convertSize("X"));
Assert.assertEquals(1,convertSize("X(1)"));
Assert.assertEquals(253,convertSize("X(253)"));
Assert.assertEquals(0,convertSize("non-match"));
Assert.assertEquals(0,convertSize(null));
Assert.assertEquals(0,convertSize("X(broken)"));
Assert.assertEquals(0,convertSize("X(broken"));
}
private Pattern xPattern = Pattern.compile("X\\((\\d+)\\)");
private Pattern ninePattern = Pattern.compile("9\\((\\d+)\\)");
private int convertSize(String pic) {
if (pic == null) {
return 0;
}
Matcher xPatternMatcher = xPattern.matcher(pic);
Matcher ninePatternMatcher = ninePattern.matcher(pic);
if ("X".equals(pic)) {
return 1;
} else if (xPatternMatcher.matches()) {
return Integer.parseInt(xPatternMatcher.group(1));
} else if (ninePatternMatcher.matches()) {
return Integer.parseInt(ninePatternMatcher.group(1)) + 1;
} else {
return 0;
}
}
}
答案 1 :(得分:1)
这是一个带示例的工作代码
public static void main(String[] args) {
System.out.println(convertSize("X(37)"));
System.out.println(convertSize("X."));
System.out.println(convertSize("X(9941)"));
}
private static int convertSize(String pic) {
try {
String myNumberInString = pic.substring(pic.indexOf("(")+1, pic.indexOf(")"));
int myNumberInInteger = Integer.valueOf(myNumberInString);
return myNumberInInteger;
} catch (Exception e){
return 0;
}
}
此程序的输出将是
37
0
9941
在这种情况下,您无法使用切换方法。
答案 2 :(得分:0)
这是一个解决方案(您仍然需要检查例外情况!)
模式可以编译一次(作为类初始化的一部分)
private int convertSize(String pic) {
Pattern p = Pattern.compile("\\((\\d+)\\)");
Matcher m = p.matcher(pic);
if (m.find()) {
if(pic.startsWith("9")) {
return Integer.valueOf(m.group(1)+1);
} else if(pic.startsWith("X")) {
return Integer.valueOf(m.group(1));
}
}
return 0;
}