HashMap<String,String> dataRules = new HashMap<String,String>();
dataRules.put("FAX_GW_NW_ELE_DM_","VARCHAR2(32 BYTE)");
在上面给出的表达式中,我需要从要使用的值中提取32个BYTE作为int 32。谁能建议我怎么做呢?
答案 0 :(得分:1)
package general;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchNumber {
public static ArrayList<Integer> extractInt(String mapValue) {
Matcher matcher = Pattern.compile("\\d+").matcher(mapValue);
// throw new NumberFormatException("For input string [" + mapValue + "]");
ArrayList<Integer> array = new ArrayList<Integer>();
while (matcher.find()){
array.add(Integer.parseInt(matcher.group()));
}
return array;
}
public static void main(String[] args){
ArrayList<Integer> result = extractInt("VARCHAR2(32 BYTE)");
for (int i : result){
System.out.println(i);
}
}
}
答案 1 :(得分:1)
假设你有固定的前缀和sufix,你可以像这样提取它
Integer.valueOf(strVal.substring(9,strVal.indexOf("BYTE)") ))
其中9是"VARCHAR2("
的长度加1
答案 2 :(得分:0)
如果类型值(如varchar2)不同,但数字将全部写在paranthesis中,您可以使用String#replaceAll
和捕获组来提取数字。
String input = "VARCHAR2(32 BYTE)";
System.out.println(input.replaceAll(".*\\((\\d*).*", "$1"));
输出
32