Поиск ArrayList для определенного символа в строке

61
4

Каков правильный синтаксис для поиска ArrayList строк для одного символа? Я хочу проверить каждую строку в массиве для одного символа. В конечном итоге я хочу выполнить множественный поиск и заменить все строки в массиве на основе наличия одного символа в строке. Я просмотрел java-examples.com и java docs, а также несколько методов поиска ArrayLists. Никто из них не делает то, что мне нужно. PS Любые указатели на использование какой-либо файловой библиотеки для выполнения нескольких поисков и замеров были бы замечательными.

--- Редактировать ---

В соответствии с рекомендациями 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.");
}
}

спросил(а) 2013-08-03T23:06:00+04:00 7 лет, 8 месяцев назад
1
Решение
61

сначала вам нужно перебрать список и выполнить поиск этого символа

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-03T23:20:00+04:00 7 лет, 8 месяцев назад
62

Для поиска и замены вам лучше использовать словарь, если вы знаете, что замените 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));
}
}

ответил(а) 2013-08-03T23:27:00+04:00 7 лет, 8 месяцев назад
62

Вы можете попробовать это, измените по мере необходимости:

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

(для поиска char, просто 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-03T23:11:00+04:00 7 лет, 8 месяцев назад
44

Вам не нужно дважды перебирать строки, чтобы делать то, что вам нужно. Вы можете выполнять замену при повторении файла.

Решение 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-08T15:19:00+03:00 3 года, 4 месяца назад
44

Другой способ - использовать итератор

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-08T15:02:00+03:00 3 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема