1

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

- - 编辑 - -

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

5 回答 5

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;
}
于 2013-08-03T20:11:00.410 回答
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));
        }
    }
}
于 2013-08-03T20:20:30.937 回答
1

对于搜索和替换,最好使用字典,如果您知道将替换HiHello. 第一个是简单的搜索,这里索引和字符串在 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));
    }
}
于 2013-08-03T20:27:49.717 回答
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);
            }
        }
    }
于 2017-12-08T12:02:07.323 回答
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
    }
于 2017-12-08T12:19:17.573 回答