2013-08-03 121 views
1

搜索單個字符的字符串的ArrayList的正確語法是什麼?我想檢查數組中的每個字符串的單個字符。 最終我想執行多個搜索並基於字符串中單個字符的存在替換數組中的所有字符串。 我已閱讀java-examples.com和java文檔以及搜索ArrayLists的幾種方法。他們中沒有一個完成我所需要的。 P.S.使用某種文件庫來執行多個搜索和替換的任何指針都會很好。在字符串中搜索某個字符的ArrayList

---編輯---

按MightyPork的建議arraylist修訂,使用簡單的string型。這也使它與包含的hoosssein解決方案兼容。


public void ArrayInput() 
    { 
     String FileName;       // set file variable 
     FileName = fileName.getText();    // get file name 

    ArrayList<String> fileContents = new ArrayList<String>();  // create arraylist 

    try { 
     BufferedReader reader = new BufferedReader(new FileReader(FileName)); // create reader 
     String line = null; 

     while ((line = reader.readLine()) != null) { 
      if(line.length() > 0){       // don't include blank lines 
      line = line.trim();        // remove whitespaces 
      fileContents.add(line);       // add to array 
      } 
      } 

     for (String row : fileContents) { 
      System.out.println(row);  // print array to cmd 
      } 

     String oldstr; 
     String newstr; 

     oldstr = "}"; 
     newstr = "!!!!!"; 

     for(int i=0;i<fileContents.size();i++){ 
     if(fileContents.contains(oldstr)){ 
     fileContents.set(i, fileContents.get(i).replace(oldstr, newstr)); 
      } 
      } 

     for (String row : fileContents) { 
      System.out.println(row);  // print array to cmd 
      } 
           // close file 
     } 

    catch (IOException ex) { // E.H. for try 
     JOptionPane.showMessageDialog(null, "File not found. Check name and directory."); 
     }   
    } 
+0

您需要手動遍歷列表,並執行搜索和替換。 –

+0

如果你能告訴我們你到目前爲止做了什麼,那將是非常棒的。 – gumenimeda

+0

@ gumenimeda,完成。 – InDeep

回答

1

首先你需要遍歷列表和搜索該字符

string.contains("A"); 

更換字符,你需要牢記該字符串是不可變的,並且您必須用該列表中的舊字符串替換新字符串

所以代碼是這個樣子

public void replace(ArrayList<String> toSearchIn,String oldstr, String newStr){ 
    for(int i=0;i<toSearchIn.size();i++){ 
     if(toSearchIn.contains(oldstr)){ 
      toSearchIn.set(i, toSearchIn.get(i).replace(oldstr, newStr)); 
     } 
    } 
} 
+0

當我將這個與'ArrayList '一起使用時,我在_method replace(String)上得到了一個「_cannot find symbol_」 ,String)_「錯誤。 – InDeep

+0

我已經設法讓我的代碼在這裏工作。謝謝。 – InDeep

+0

但是,這不適用於搜索和替換字符串的一部分。除非有一個我不熟悉的簡單調整。 – InDeep

1

你可以試試這個,根據需要修改:

public static ArrayList<String> findInString(String needle, List<String> haystack) { 
    ArrayList<String> found = new ArrayList<String>(); 

    for(String s : haystack) { 
     if(s.contains(needle)) { 
      found.add(s); 
     } 
    } 

    return found; 
} 

(搜索字符,只是做myChar+"",你有串)


要添加find'n'replace功能現在應該對你來說相當容易。


下面是搜索String[]變體:

public static ArrayList<String[]> findInString(String needle, List<String[]> haystack) { 
    ArrayList<String[]> found = new ArrayList<String[]>(); 

    for(String fileLines[] : haystack) { 
     for(String s : fileLines) { 
      if(s.contains(needle)) { 
       found.add(fileLines); 
       break; 
      } 
     } 
    } 

    return found; 
} 
+0

請注意,我正在使用「ArrayList 」,因此(據我所知),此語法不起作用。 – InDeep

+0

如果您不將文件分割成行,它將起作用。或者,如果你堅持使用字符串數組,那麼是什麼原因阻止你在我的代碼中添加一個額外的循環來通過這些行呢? – MightyPork

+0

它與使用'String'類型搜索'String []'類型'數組列表'有關。'我想。它給出了不匹配的類型錯誤(即使進行了各種修改)。如何添加額外的循環效果?而且,是的,文件需要逐行加載到數組中。 (我不確定我是否理解你的評論。) – InDeep

1

對於搜索和替換你最好使用字典,如果你知道你將與Hello取代Hi。第一個是一個簡單的搜索,這裏的索引和字符串是在Object [2]中返回的,你必須輸出結果。它返回第一場比賽,你不清楚這一點。

public static Object[] findStringMatchingCharacter(List<String> list, 
     char character) { 

    if (list == null) 
     return null; 
    Object[] ret = new Object[2]; 
    for (int i = 0; i < list.size(); i++) { 
     String s = list.get(i); 
     if (s.contains("" + character)) { 
      ret[0] = s; 
      ret[1] = i; 
     } 
        return ret; 
    } 
    return null; 
} 

public static void searchAndReplace(ArrayList<String> original, 
     Map<String, String> dictionary) { 
    if (original == null || dictionary == null) 
     return; 
    for (int i = 0; i < original.size(); i++) { 
     String s = original.get(i); 
     if (dictionary.get(s) != null) 
      original.set(i, dictionary.get(s)); 
    } 
} 
0

的另一種方法,通過使用迭代器

public static void main(String[] args) { 
     ArrayList<String> list = new ArrayList<>(); 
     list.add("Naman"); 
     list.add("Aman"); 
     list.add("Nikhil"); 
     list.add("Adarsh"); 
     list.add("Shiva"); 
     list.add("Namit"); 
     Iterator<String> iterator = list.iterator(); 
     while (iterator.hasNext()) { 
      String next = iterator.next(); 
      if (next.startsWith("Na")) { 
       System.out.println(next); 
      } 
     } 
    } 
0

你並不需要遍歷行兩次做你的需要。迭代文件時可以進行替換。

的Java 8解決方案

try (BufferedReader reader = Files.newBufferedReader(Paths.get("pom.xml"))) { 
     reader 
      .lines() 
      .filter(x -> x.length() > 0) 
      .map(x -> x.trim()) 
      .map(x -> x.replace("a", "b")) 
      .forEach(System.out::println); 
    } catch (IOException e){ 
     //handle exception 
    }