所以我完成了我需要做的任务,我想要完成的是将一个单词从一个单词改为一个单词的缩写。 单词和缩写存储在二维矩阵中。这是我已经获得的代码,但它不起作用。
String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}};
String origText = "The;coastline;of;United Kingdom;is;12429;kilometers";
int n = origText.length();
for (int i = 0; i < n ; i++){
origText = origText.replaceAll(";", " ");
if (origText.toLowerCase().contains(abriev[i][0])){
origText = origText.replaceAll(abriev[i][0], abriev[0][i]);
}
}
System.out.println(origText);
答案 0 :(得分:1)
首先,我将abriev
转换为Map
以便于查找。然后,我将原始文本,用;
字符拆分,流式传输,用缩写(如果可用)替换每个单词,然后重新加入流:
String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}};
Map<String, String> abrievMap =
IntStream.range(0, abriev[0].length)
.boxed()
.collect(Collectors.toMap(i -> abriev[0][i], i -> abriev[1][i]));
String origText = "The;coastline;of;United Kingdom;is;12429;kilometers";
String abbreviated =
Arrays.stream(origText.split(";"))
.map(word -> abrievMap.getOrDefault(word, word))
.collect(Collectors.joining(";"));
答案 1 :(得分:1)
您要将orgText
的长度分配给变量n
:
String origText = "The;coastline;of;United Kingdom;is;12429;kilometers";
你有二维数组:
String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}};
您从0
迭代到origText
的长度。同样在循环内部,您尝试访问i
'索引,因为您的第一个数组只包含两个索引(两个数组),所以无法完成。
因此,当您运行该程序时,您将获得ArrayIndexOutOfBoundsException
尝试使用Collections。
答案 2 :(得分:1)
你的字符串看起来很容易拆分,你可以迭代它,进行替换,并将其附加到StringBuilder
。
对于字符串2d数组,您可以轻松地将其转换为Map并将键设置为您要搜索的单词和值。
在您的代码中,您实际上通过调用[0][i]
作为replaceAll()
中的第二个参数来重置您所做的更改;
我会做的是:
String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}};
String origText = "The;coastline;of;United Kingdom;is;12429;kilometers";
HashMap<String, String> wordAbbr = new HashMap<String,String>();
for(int i = 0; i < abriev[0].length; i++ )
{
wordAbbr.put(abriev[0][i], abriev[1][i]);
}
String [] origArr = origText.split(";");
String output = "";
for(String s : origArr){
if(wordAbbr.get(s)!=null) {
output = output + " " + wordAbbr.get(s);
}else {
output = output + " " + s;
}
}
output = output + ".";
System.out.println(output);