2013-08-03 123 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 
    }