为单个字符搜索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.");
}
}
答案 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
}