Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从hashmap值中的字符串中提取或获取int值 HashMap dataRules=newhashmap(); dataRules.put(“FAX_GW_NW_ELE_DM_”,“VARCHAR2(32字节)”);_Java_Hashmap - Fatal编程技术网

Java 如何从hashmap值中的字符串中提取或获取int值 HashMap dataRules=newhashmap(); dataRules.put(“FAX_GW_NW_ELE_DM_”,“VARCHAR2(32字节)”);

Java 如何从hashmap值中的字符串中提取或获取int值 HashMap dataRules=newhashmap(); dataRules.put(“FAX_GW_NW_ELE_DM_”,“VARCHAR2(32字节)”);,java,hashmap,Java,Hashmap,在上面给定的表达式中,我需要从要使用的值中提取32字节作为int 32。有人能建议我怎么做吗?软件包概述; HashMap<String,String> dataRules = new HashMap<String,String>(); dataRules.put("FAX_GW_NW_ELE_DM_","VARCHAR2(32 BYTE)"); 导入java.util.ArrayList; 导入java.util.regex.Matcher; 导入java.util

在上面给定的表达式中,我需要从要使用的值中提取32字节作为int 32。有人能建议我怎么做吗?

软件包概述;
HashMap<String,String> dataRules = new HashMap<String,String>();

dataRules.put("FAX_GW_NW_ELE_DM_","VARCHAR2(32 BYTE)");
导入java.util.ArrayList; 导入java.util.regex.Matcher; 导入java.util.regex.Pattern; 公共类匹配号{ 公共静态ArrayList extractInt(字符串映射值){ Matcher Matcher=Pattern.compile(\\d+).Matcher(mapValue); //抛出新的NumberFormatException(“对于输入字符串[“+mapValue+”]”); ArrayList数组=新的ArrayList(); while(matcher.find()){ add(Integer.parseInt(matcher.group()); } 返回数组; } 公共静态void main(字符串[]args){ ArrayList结果=extractInt(“VARCHAR2(32字节)”); for(int i:结果){ 系统输出打印LN(i); } } }
假设您有固定的前缀和sufix,您可以这样提取它

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);
    }

  }
}

其中9是
“VARCHAR2的长度(“
加1

如果类型值(如VARCHAR2)不同,但数字将始终用paradensis编写,您可以使用捕获组使用
字符串#replaceAll
提取数字

Integer.valueOf(strVal.substring(9,strVal.indexOf("BYTE)") ))
输出

String input = "VARCHAR2(32 BYTE)";
System.out.println(input.replaceAll(".*\\((\\d*).*", "$1"));

另外,值得注意的是,您的问题实际上与值在映射中这一事实无关。您正在尝试从字符串“VARCHAR2(32字节)”中提取int值32-该字符串的来源至少有些不相关。@KevinEsche:在本例中,这将留下232…@JonSkeet my bad,没有真正看到varchar中的2…我正在尝试使用子字符串,希望它能工作,没问题。感谢OP的情况,由于VARCHAR2,它将返回2。现在这个示例应该同时打印2和32Actually它不工作。
strVal.indexOf(“VARCHAR2”(“)
返回
0
。因此子字符串方法返回
“VARCHAR2(32”
而不是
32
正确,我修改了它。
32