Java 字符串高级修剪程序

Java program for advanced trimming of String

原题是----在java中写一个程序,输入一个只以!结尾的句子。要么 ? .句子中的每个单词由一个空格分隔space。将句子转换为大写并删除多余的空格 space,以便每个单词仅由一个空格 space 分隔。打印无效输入的消息。

我已经写了一个答案,但是没成功。这是我的代码:

package OMG;
import java.util.Scanner;
public class Trimmer_new 
{
    String Trim(String s)
    {
        s=s.trim();
        String ans="";
        int k=0;
        s=s+" ";
        for(int i=1;i<=s.length();i++)
        {
            if(s.charAt(k)!= ' ') 
            {
                char g=s.charAt(k);
                ans=ans+g;
                k++;
            }
            else
            {
                while(s.charAt(k)==' ')
                {
                    k++;                    
                }
                ans=ans+" ";
                k++;
            }
        }
        ans.trim();
        return ans;
    }
    public static void main(String[]args)
    {
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter a sentance ending only with '!' or '?': ");
        String a=sc.next();  
        if(a.endsWith("!")==true||a.endsWith("?")==false)           
        {
            Trimmer_new ob= new Trimmer_new();
            System.out.println("Trimmed sentence: "+ob.Trim(a));
        }  
        else
        {
            System.out.println("error");
        }
        sc.close();
    }
}

但在 运行 时抛出异常:

谁能给我提供更好更干净的代码??

(我在 Eclipse IDE 中这样做)

有两个问题。首先你永远不会在递增 K++ 时进行检查其次你没有使用 i 即使你不能使用 i 值作为 i=s.length();你总是需要使用 till -1 因为数组从 0 开始。

更好的选择是:

String result = Arrays.stream(input.split(" ")).filter(p-> p.length()>0).map(p-> p.trim()).collect(Collectors.joining(" "));