我从 cobol copybook 中提取了格式信息,需要使用 switch 或 if 语句来获取 ( ) 中的值。所有值都在一个字符串数组中,我正在使用下面的示例值迭代数组。
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;
}
我应该用“string inside”替换什么才能得到结果? “\d+”不起作用,因为它在数组中保存为字符串。
最佳答案
给你。完全单元测试...
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;
}
}
}
关于java - 在 Java 中将字符串中括号内的值作为整数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819604/