Я хочу заменить все слово в абзаце в java, но это также заменяет совпадающие символы. Не знаю как это сделать - PullRequest
0 голосов
/ 18 июня 2020

Например, если я ввел строку

"hello this is java"

и я хочу заменить is на at, но вывод java показывает

"hello that at java"

код

String a[]; 
String s1; 
s1 = JOptionPane.showInputDialog("Enter the string"); 
a = s1.split("[\s\.]"); 
String s2 = JOptionPane.showInputDialog("Enter the word to replace "); 
String s3 = JOptionPane.showInputDialog("Enter the word to replace with"); 
String s; 
for(int i=0; i<=a.length; i++) { 
    s = a[i]; 
    if(s.equals(s2) == true) { 
       char[] string1 = s2.toCharArray(); 
       char[] string2 = s.toCharArray(); 
       if(Arrays.equals(string1, string2) == true) { 
           System.out.println("here i am"); 
           String q = s1.replace( s2, s3);  
           JOptionPane.showMessageDialog(null,q,"Array values",JOptionPane.WARNING_MESSAGE); 
         break; 
       }

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы можете использовать регулярные выражения с выражением «границы слова» (\ b) вместе с replaceAll , например:

String word = "is";
String replacement = "at";

String result = "is this? This is, an island".replaceAll("\\b" + word + "\\b", replacement);
// result: "at this? This at, an island"

В вашем случае , вы хотите заменить эту строку:

String q = s1.replace(s2, s3); 

на эту строку:

String q = s1.replaceAll("\\b" + s2 + "\\b", s3);

Вот полный пример:

import javax.swing.JOptionPane;

public class Test {
    public static void main(String[] args) {
        String s1 = JOptionPane.showInputDialog("Enter the string"); 
        String s2 = JOptionPane.showInputDialog("Enter the word to replace "); 
        String s3 = JOptionPane.showInputDialog("Enter the word to replace with"); 
        String q = s1.replaceAll( "\\b" + s2 + "\\b", s3);  
        JOptionPane.showMessageDialog(null,q,"Array values",JOptionPane.WARNING_MESSAGE); 
    }
}
0 голосов
/ 19 июня 2020

Проблема

Основная проблема в вашем коде заключается в использовании счетчика l oop до длины массива, что приведет к ArrayIndexOutOfBoundsException, поскольку индекс массива находится в диапазоне от 0 на the length of array - 1.

Сделайте это следующим образом:

import javax.swing.JOptionPane;

public class Main {
    public static void main(String[] args) {
        String s1 = JOptionPane.showInputDialog("Enter the string");
        String s2 = JOptionPane.showInputDialog("Enter the word to replace ");
        String s3 = JOptionPane.showInputDialog("Enter the word to replace with");

        String a[] = s1.split("\\s+");// Split the string on space(s)
        for (int i = 0; i < a.length; i++) {
            //Replace the word in the array
            if (a[i].equals(s2)) {
                a[i] = s3;
            }
        }

        JOptionPane.showMessageDialog(null, String.join(" ", a));
    }
}

В качестве альтернативы вы можете использовать регулярное выражение, "\\b" + s2 + "\\b" где \\b относится к границе слова .

import javax.swing.JOptionPane;

public class Main {
    public static void main(String[] args) {
        String s1 = JOptionPane.showInputDialog("Enter the string");
        String s2 = JOptionPane.showInputDialog("Enter the word to replace ");
        String s3 = JOptionPane.showInputDialog("Enter the word to replace with");
        JOptionPane.showMessageDialog(null, s1.replaceAll("\\b" + s2 + "\\b", s3));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...