gpt4 book ai didi

java - 如果 ArrayList 是 Map 中的键,如何从 ArrayList 中检索值?

转载 作者:行者123 更新时间:2023-12-01 12:42:50 25 4
gpt4 key购买 nike

我是 Java 新手。现在我正在尝试使用类似的结构

 Map<List<String>,String>    

..从列表中检索字符串存在困难。

详细信息:我正在制作一个简单的程序,它获取电话号码并检查特定号码属于哪个国家/地区。它通过与正则表达式匹配来检查它们(基础数字量和国际前缀:因为前缀(以及正则表达式)可能不止一个 - 选择列表)。

所以,正则表达式的结构是:

"^(%s)\\d{%d}", prefix, digitAmount    

某些号码有一些基本数据(芬兰语、英语),但用户也可以添加新的数据(例如:Gonduras - 前缀:849,位数:8,Gonduras(相同) - 前缀 49,位数:7等)因此,当您输入像 893143045839 这样的数字时,它应该查找它是否与正则表达式匹配。如果是,则返回国家/地区(一个值)。这就是选择 map 的原因。

这里的代码是:

static Map <List<String>, String> data = new HashMap<List<String>, String>();
static List<String> newdata = new ArrayList<String>();

void addBasicData () // here I add some predefined parameters
{
List<String> finnNumbers = new ArrayList<String>();
finnNumbers.add("^(3589)\\d{6}");
finnNumbers.add("^(003589)\\d{6}");
finnNumbers.add("^(09)\\d{6}");
data.put(finnNumbers, "Finland");
}


void addNewData (String pattern, List<String> newdata) //here I add new data from user
{
pattern();
data.put(newdata, pattern);
}

问题进一步发生。当我想检查某个数字时,我必须创建一个模式 - 它应该从数据中获取正则表达式。嗯,看来我不能。这是方法..

void numberCheck (String inputNumber)
{

// maybe I'll use Set values = data.keySet(); ? ...nah, doesn't work either :(


for (int i = 0; i<= data.size(); i++)
{
Object c = data.get(i);
List<String> check = (List<String>)c;
for (int j = 0; j <check.size(); j++)
{

Pattern pat = Pattern.compile(check.get(j));
Matcher matcher = pat.matcher(inputNumber);
if (matcher.find())
{
// some useful code
}

}


}

..,这不起作用并给出 NullPointerException。当我想获取一个键然后尝试每个正则表达式作为模式时,它会给我一个对象,而不是 ArrayList。这就是我问的原因。我尝试像反向一样使用它( Map> ),但随后我需要迭代值,并且存在同样的问题。

这就是重点

    Object c = data.get(i);
List<String> check = (List<String>)c;

,一切都崩溃了。也许,我做的完全错误,应该在我的例子中使用其他类。

如果有人能给我建议,我会很高兴。谢谢!

最佳答案

我想这就是你想做的

Map<String, List<String>> map = new HashMap<String, List<String>>();
// ...some more code...
for (List<String> regexNumbers : map.values()) {
// regexNumbers is the value
}

因为您没有在方法中使用 key 。

但是如果您创建一个类,您的代码将更具可读性 - 这就是您的结构,这就是您想要的,并且您知道(!)其中的内容(即使在几年内):

class CountryNumbers {
String country;
List<String> numbers;
}

将每个号码打印到一个国家/地区的示例代码:

List<CountryNumbers> list = fillListSomehow();
for (CountryNumbers countryNumbers : list) {
String country = countryNumbers.country;
System.out.println("The regexes for country " + country + " are: ");
for (String regexNumber : countryNumbers.numbers) {
System.out.println(" " + regexNumber);
}
}

关于java - 如果 ArrayList<String> 是 Map 中的键,如何从 ArrayList<String> 中检索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24934782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com