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

时间:2015-04-01 22:55:36

标签: 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 个答案:

答案 0 :(得分:2)

看一下数组的内容,分割你的字符串作为示例输入:它将是这样的:

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

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

答案 1 :(得分:0)

您可以尝试使用此问题中描述的内容将单词[i]值解析为数字

How to check if a String is numeric in Java

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

答案 2 :(得分:0)

编辑:看起来@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);
    }
}