在ArrayList中搜索特定字符

时间:2013-08-03 20:06:14

标签: java arrays search arraylist replace

为单个字符搜索ArrayList个字符串的正确语法是什么?我想检查数组中的每个字符串是否有单个字符。 最终,我想根据字符串中单个字符的存在执行多次搜索并替换数组中的所有字符串。 我查看了java-examples.com和java文档以及几种搜索ArrayLists的方法。他们都不能满足我的需要。 附:任何关于使用某种文件库来执行多次搜索和替换的指针都会很棒。

---编辑---

根据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.");
    }           
}

5 个答案:

答案 0 :(得分: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'nplace功能现在应该相当容易。


以下是搜索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;
}

答案 1 :(得分:1)

首先,您需要迭代列表并搜索该字符

string.contains("A");

替换字符需要记住String是不可变的,你必须用该列表中的旧字符串替换新字符串

所以代码就像这样

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

答案 2 :(得分:1)

对于搜索和替换,如果您知道将Hi替换为Hello,则最好使用字典。第一个是简单的搜索,这里有索引和在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));
    }
}

答案 3 :(得分:0)

  

使用迭代器的另一种方法

jsonObjArr=jsonObjArr.splice(idx,1);

答案 4 :(得分: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
    }