有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中,将字符串中的单词大写,但跳过字符串中的数字和多余空格或符号

这就是我的节目

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.awt.event.*;

public class Capitalize

{
    public static void main(String [] arg)
    {

        String x = JOptionPane.showInputDialog("Enter Phase");

        String y = capsFirst(x);


        System.out.println(y);
    }


    public static String capsFirst(String str) 
    {
        String[] words = str.split(" ");

        StringBuilder ret = new StringBuilder();

        for(int i = 0; i < words.length; i++) 
        {
            ret.append(Character.toUpperCase(words[i].charAt(0)));

            ret.append(words[i].substring(1));

            if(i < words.length - 1) 
            {
                ret.append(' ');
            }
        }

        return ret.toString();
    }
}

现在的问题是我想不出我需要什么逻辑来让它运行嘿,这是一个数字,我不能编辑这个。当问题出现时,不要告诉我这个错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 

String index out of range: 0

    at java.lang.String.charAt(String.java:646)
    at Capitalize.capsFirst(Capitalize.java:36)
    at Capitalize.main(Capitalize.java:25)

我必须转换的文本示例如下:

伦敦(四个空间)英格兰2015

必须转换为

伦敦(四个空间)英格兰2015


共 (3) 个答案

  1. # 1 楼答案

    你可以试着用这个问题中描述的东西将单词[i]值解析成一个数字

    How to check if a String is numeric in Java

    如果isNumber返回true,则不必大写,只需将字符串附加到ret

  2. # 2 楼答案

    查看示例输入中拆分字符串的数组内容:它类似于:

    {"london", "", "", "", "england", "2015"}
    

    处理其中一个空字符串时会出现问题。您可以在尝试大写其第一个字母之前检查words[i]是否为空(因为没有第一个字母)

  3. # 3 楼答案

    编辑:看起来是@Andy Turner给了你答案,但这是他暗示的代码

    public static String capsFirst(String str) 
        {
            String[] words = str.split(" ");
    
            StringBuilder ret = new StringBuilder();
    
            for(int i = 0; i < words.length; i++) 
            {
              if (words[i].length() == 0){
                ret.append(' ');
                continue;
              }
    
              if (Character.isLetter(words[i].charAt(0))){
                ret.append(Character.toUpperCase(words[i].charAt(0)));
                ret.append(words[i].substring(1));
              }
              else{
                ret.append(words[i]);
              }
    
                if(i < words.length - 1) 
                {
                    ret.append(' ');
                }
            }
    
            return ret.toString();
        }
    

    此外,还有一种不同的方法,可以在char数组中就地执行:

    public class Capitalize
    
    {
        public static void main(String [] arg)
        {
    
            String x = "london   england 2015";
    
            String y = capsFirst(x);
    
    
            System.out.println(y);
        }
    
    
        public static String capsFirst(String str) 
        {
            boolean betweenWords = false;
            char[] chars = str.toCharArray();
    
            for(int i = 0; i < chars.length; i++) 
            {
              if (chars[i] == ' '){
                betweenWords = true;
                continue;
              }
    
    
              if (betweenWords || i == 0){
                if (Character.isLetter(chars[i])){
                  chars[i] = Character.toUpperCase(chars[i]);
                }
    
                betweenWords = false;
              }
    
            }
    
            return new String(chars);
        }
    }