用java替换字符串矩阵中的某个单词

时间:2017-06-02 22:19:30

标签: java string oop

所以我完成了我需要做的任务,我想要完成的是将一个单词从一个单词改为一个单词的缩写。 单词和缩写存储在二维矩阵中。这是我已经获得的代码,但它不起作用。

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

3 个答案:

答案 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);