【任务一】:
实验要求:
能够根据业务的要求设计和定义类;能够根据业务的要求提取出和业务相关的属性和方法;能够使用定义的属性和
方法完成相应的业务要求;能够使用对象和对象之间的关系完成业务要求;能够将实际的问题描述转换成 Java程序。
实验任务:编写一个 Java 程序,将用户输入的句子当中每一个单词的第一个字母大写, 而单词中的其余字母小写。
要求:
1. 创建类 CaseConverter。
2. CaseConverter 具有方法 String convert(String value),用于返回转换大小写后的结果。
3. 写一个测试类来测试该程序,首先要求用户输入一个句子, 然后提取每一个单词,并将单词的首字母转换成大写,
其余字符小写。 最后输出新字符串。
提示:
1. 需要使用 Scanner的 nextLine()方法来获取一个句子。
2. 使用 StringBuffer类来创建替换过大小写的新字符串。
注意:
1. 单词的分割符除了空格之外,还可能有 Tab或者( ,;.等标点符号)。
2. 注意判断首字符是不是字母。
3. 单词中的其他字母可能为大写。
例如:当用户输入”Thisis a samPLe sentencE to demostrATE the TasK 2.”
实验步骤:
新建两个类——CaseConverter(实现功能)、TestCaseConverter(测试功能)
实验代码:
< CaseConverter.java>
public class CaseConverter {
public static String[] words = new String[20];
public static String convert(String value) {
StringBuffer upAfter = new StringBuffer(value.length());
char aCharacter;
//将tab , ; .等标点符号替换成空格
value = value.replaceAll("[\\pP‘’“”]", " ");
words = value.split(" ");
for (int i = 0;i < words.length; i++)
{
for(int j = 0;j < words[i].length(); j++) {
aCharacter = words[i].charAt(j);
if (j==0) {
//判断是不是字母
if(Character.isLetter(aCharacter)) {
upAfter.append(Character.toUpperCase(aCharacter));
}
else {
upAfter.append(words[i].charAt(j));
}
}
else {
//如果该字符是字母切是大写字母,则转小写,否则直接连接
if(Character.isLetter(aCharacter) && Character.isUpperCase(aCharacter)) {
upAfter.append(Character.toLowerCase(aCharacter));
}
else {
upAfter.append(words[i].charAt(j));
}
}
}
upAfter.append(" ");
}
return new String(upAfter);
}
}
< TestCaseConverter.java>
import java.util.Scanner;
public class TestStringEditor {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.print("Input your string:");
String inputString = scan.nextLine();
scan.close();
System.out.println("Your string after change:" + CaseConverter.convert(inputString));
}
}
实验笔记:
1. 提取一句英语句子(字符串)中的单词,使用了String split()方法。
在java.lang包中有stringObj.split([separator,[limit]]) 方法,将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj 必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator 可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整
个字符串的单一元素数组。
limit 可选项。该值用来限制返回数组中的元素个数
举个栗子:
String.split("\\.")用“.”作为分隔
String.split("\\|")用“|”作为分隔
String.split(" ", 2); 用“ ”作为分割,并且返回2个数组
由于在这个实验中,单词的分割符除了空格之外,还可能有 Tab或者( ,;.等标点符号),
所以先把所有的标点符号全部替换成空格,然后再通过split(" ")提取出单词。
在 JDK 6 以下的版本中可以这样:(用空格*正则替换字符串中的全椒、半角标点符号)
value = value.replaceAll("[\\pP‘’“”]", " ");
2. 在遍历(二维)字符串数组的过程中,使用了length(),charAt()方法。