【解決方法】単語間のスペースを除いて、文字列内の単語を * に置き換えます

[ad_1]

「悪い」という単語をそのまま印刷しようとしているコードを書き、他の単語を*に置き換えています。 コードは次のとおりです。

import java.util.*;
import java.io.*;
import java.lang.*;

    public class wordreplaceabhinew
    {
        
       
  
     public static void main(String[]args)
        {
            Scanner sc=new Scanner(System.in);
            String comment;
            System.out.println("Enter a comment:");
            comment=sc.nextLine();
           
 
   
    for (int i = 0; i < comment.length(); i++) {
       
if(comment.charAt(i)!=' ')
{
     
      if(comment.charAt(i)=='b')
      {
         
          if(comment.charAt(i+1)=='a')
          {
             
             if(comment.charAt(i+2)=='d')
             {
              comment=comment.substring(i,i+3);
               
             }
            
          }

          else 
          {
              System.out.print("*");

          }
   
      } 
      
System.out.print("*");
         
}
else
{
    System.out.print(" ");
    
}


        
   
}
  System.out.print(comment);
 


              
        }  
    }

たとえば、私の入力は「私は悪い」です
O/p は「* ** 悪い」である必要があります
しかし、代わりに「* ** *bad」を取得しています
どこが間違っているのか理解したいですか?

私が試したこと:

import java.util.*;
import java.io.*;
import java.lang.*;

    public class wordreplaceabhinew
    {
        
       
  
     public static void main(String[]args)
        {
            Scanner sc=new Scanner(System.in);
            String comment;
            System.out.println("Enter a comment:");
            comment=sc.nextLine();
           
 
   
    for (int i = 0; i < comment.length(); i++) {
       
if(comment.charAt(i)!=' ')
{
     
      if(comment.charAt(i)=='b')
      {
         
          if(comment.charAt(i+1)=='a')
          {
             
             if(comment.charAt(i+2)=='d')
             {
              comment=comment.substring(i,i+3);
               
             }
            
          }

          else 
          {
              System.out.print("*");

          }
   
      } 
      
System.out.print("*");
         
}
else
{
    System.out.print(" ");
    
}


        
   
}
  System.out.print(comment);
 


              
        }  
    }

解決策 1

最初の問題: ループ変数の範囲は、値内のすべての有効な文字インデックスにまたがっています。 ただし、ループ内では、インデックスの文字にアクセスしようとします i+1i+2. たとえば、文字列が “Jacob” で終わる場合、文字列の末尾を超える文字にアクセスしようとすると例外が発生します。

2番目の問題: あなたはどちらかを書き出す '*' または ' ' 文字列内のすべてに対して の他に 「悪い」、残りの「悪い」を最後に書きます。 たとえば、あなたの入力が 「これはとても悪いことです。あなたの先生はあなたがこれをすることを禁じました。」、あなたは出力します: 「**** ** *** ; **** ******** **** **** **** ***** ***** バッドバッド」、これは明らかに間違っています。

あなたがそうしないことを除いて、 3番目の問題: 「悪い」を見つけたらすぐに、残りの文字列を捨てます。 その入力が実際に生成するのは “**** ** **** 悪い”.

それ以外は まだ あまり正しくありません。 4番目の問題: あなたは書いています '*' スペースではないすべてのもの。 したがって、最初の「悪い」を見つけたら、 '*'、ループを終了し、「悪い」と書き出します。

立ち止まって、何をしようとしているのか考えてみてください。 入力文字列の変更を停止し、ループの一部として「bad」を書き出します。

これは宿題なので、コードはありません。 しかし、あなたはこのようなものを実装したい:

  • 現在の文字がスペースの場合は、スペースを書き込みます。
  • それ以外で、現在の文字が “b” で、インデックスが長さより少なくとも 3 つ小さく、次の 2 文字が “a” と “d” の場合は、”bad” と書きます。
  • それ以外の場合は「*」と書きます。

解決策 2

リチャードが書いたことに加えて、文字列をチャンクすることをお勧めします。 Java で区切り文字を使用して文字列を分割する方法 – Javatpoint[^] 単語の比較を行ってから、再結合/連結します。

単語を比較する方法: Java での文字列比較 – javatpoint[^]

[ad_2]

コメント

タイトルとURLをコピーしました