我无法弄清楚如何判断此程序中是否有空格。该程序应该接受一个字符串,将其更改为char数据,然后将每个单词的第一个字母大写。
代码如下:
import java.util.*;
public class wrapper1
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String s1;
System.out.println("Enter a phrase: ");
s1=input.nextLine();
s1=s1.trim();
int counter;
char c;
boolean flag=true;
for(counter=0; counter < s1.length(); counter++)
{
c=s1.charAt(counter);
while(counter < s1.length())
{
if(flag==true)
{
Character.toUpperCase(c);
flag=false;
}
else if(!Character.isLetter(c))
{
flag=true;
}
}
System.out.print(c);
}
}
}
我做了一个循环,该循环的目标是通过将标志设置为false来遍历每个单词的第一个字母的数据,然后在找到空格时返回true。
但是,我不知道如何编写else if语句来检查空格,因此这就是我正在寻找的(编写该语句的方法)。
感谢任何帮助。
答案 0 :(得分:1)
为什么要使用&#34; charAt&#34; (你的代码在那里是无效的,afaikt)。你已经拥有了当前的char。所以检查它是否是空格。您只需要考虑连续的空格 - 类似if(flag==true && c != ' ')
另外,为什么这样做?为什么不使用String.split(...)?
P.S。惯例说我们使用以大写字母开头的类名。
答案 1 :(得分:1)
要更正代码,请删除while语句,并将ZouZou提到的toUpperCase的结果分配给c
public static void main (String[] args) throws java.lang.Exception
{
Scanner input = new Scanner(System.in);
String s1;
System.out.println("Enter a phrase: ");
s1=input.nextLine();
s1=s1.trim();
int counter;
char c;
boolean flag=true;
for(counter=0; counter < s1.length(); counter++)
{
c=s1.charAt(counter);
if(flag==true)
{
c = Character.toUpperCase(c);
flag=false;
}
else if(s1.charAt(counter)==' ')
{
flag=true;
}
System.out.print(c);
}
}
请注意,您的解决方案仅将空格视为分隔符,而不是其他空格(例如制表符)或空格字符序列。
这是一个更简洁的解决方案,用于处理标签和序列
for(String s : s1.split("\\s+")){
System.out.print(Character.toUpperCase(s.charAt(0)) + s.substring(1) + " ");
}
更简洁的版本是使用Apache Commons WordUtils.capitalize