2017-06-02 67 views
0

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

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

回答

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

非常感谢你:) – Lalano

1

首先,我想转换abrievMap更容易查找。然后,我会拿原文,由;字符分割它,它流,其缩写代替每个字(如果有的话),并重新加入流:

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

您的orgText分配长度可变n

String origText = "The;coastline;of;United Kingdom;is;12429;kilometers"; 

而且你二维数组:

String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}}; 

,并正在从迭代3210到origText的长度。同样在循环内部,你试图访问i'th索引,因为你的第一个数组只包含两个索引(两个数组),所以无法完成。

正因为如此,当你运行程序,你会得到ArrayIndexOutOfBoundsException

尝试使用Collections

相关问题