资本化第一封信

时间:2013-10-24 23:23:26

标签: java

我正在尝试编写代码以在句点“。”之后将首字母大写。

例如:

String str = "abcdef. ghijk, mlnopqrs. tuv .................." 
//the "............" means the line is still going on.

输出应为:

"Abcdef. Ghijk, mlnopqrs. Tuv ................."

注意:仅使用基本方法

字符串:charAtindexOflengthsubstringtoUpperCase

这意味着没有Stringbuilder,没有数组,没有拆分...等。我在本网站找到的其他解决方案涉及这些事情。


编辑:非常感谢大家的快速回复。刚看到Robin Krahl的编辑。是的,我忘了添加我的代码。 我的代码看起来与 mau 的回复完全一样。但是这段代码最终会出现这种异常

  

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围

从这里我不知道如何解决这个问题.-

4 个答案:

答案 0 :(得分:1)

我可以帮助你解决逻辑部分:

  1. 找到子串直到“。”
  2. 使charAt将子字符串的第零个位置设​​置为大写。
  3. 循环1到2直到不再“。”存在于字符串
  4. 连接子字符串
  5. 希望这有帮助

答案 1 :(得分:1)

int length = str.length()
for(int x = 0; x < length-1; x++) {
  if(str.charAt(x) == '.') {
    str = str.substring(0,x+1) + (""+str.charAt(x+1)).toUpperCase() + str.substring(x+2,length+1);
  }
}

如果字母不是直接在句点之后,要么向前看两个,要么循环以寻找下一个字母。你可以说

letter = str.charAt(x);
if((letter >= 'A' && letter <= 'Z") || (letter >= 'a') && letter <= 'z'))

答案 2 :(得分:1)

我会这样做:

  • 使用String.toCharArray()获取字符数组。
  • 使用计数器依次查看数组中的每个字符。
  • 找到句点时,请设置一个标记。
  • 如果在设置标志时找到了一个字母,请清除该标志并用大写字母替换该字符。
  • 完成循环后,使用String.valueOf()
  • 创建一个新字符串

答案 3 :(得分:0)

构建一个具有2个状态的状态机并让它扫描字符。

从状态1开始:如果输入是句号

,则切换到状态2

状态2:如果输入不是句点而不是空格,则切换到状态1

状态1:输出无需修改的输入

状态2:如果输入是一个字符,则输出大写为toUpper

import java.util.Scanner;
public class Capitalize {
  public static void main (String [] args) {
    Capitalize instance = new Capitalize();
    try (Scanner s = new Scanner(System.in)) {
      while (s.hasNext()) {
        instance.capitalize_and_print(s.nextLine());
      }
    }
  }

  public void capitalize_and_print (String s) {
    int state = 0;
    for (int i = 0; i < s.length(); ++i) {
      switch (state) {
        case 0:
          System.out.print(s.charAt(i));
          if (s.charAt(i) == '.') {
            state = 1;
          }
          break;
        case 1:
          System.out.print(Character.toUpperCase(s.charAt(i)));
          if (s.charAt(i) != '.' && s.charAt(i) != ' ') {
            state = 0;
          }
          break;
      }
    }
  }
}

更新:更简单的版本

public class Capitalize {
  public static void main (String [] args) throws java.io.IOException {
    int state = 2;
    int c = System.in.read();
    while (c != -1) {
      if (state == 1) {
        System.out.print((char)c);
        if (c == '.') {
          state = 2;
        }
      } else {
        System.out.print(Character.toUpperCase((char)c));
        if (c != '.' && c != ' ') {
          state = 1;
        }
      }
      c = System.in.read();
    }
  }
}

更新2:更简单的版本

public class Capitalize {
  public static void main (String [] args) throws java.io.IOException {
    String str = "abcdef. ghijk, mlnopqrs. tuv ..................";
    int state = 2;
    for (int i = 0; i < str.length(); ++i) {
      char c = str.charAt(i);
      if (state == 1) {
        System.out.print(c);
        if (c == '.') {
          state = 2;
        }
      } else {
        System.out.print(Character.toUpperCase(c));
        if (c != '.' && c != ' ') {
          state = 1;
        }
      }
    }
  }
}