实现:
1) 输入一个英文短句,指定单词倒序输出的起点和终点
2) 按照指定倒序输出
3) 输入无效时,输出Empty
package practic; import java.util.Scanner; import java.util.StringTokenizer; public class Main_M1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { StringTokenizer s1 = new StringTokenizer(sc.nextLine()); int start = sc.nextInt(); int end = sc.nextInt(); int n = s1.countTokens(); if (end > n - 1 || start >= end) System.out.println("Empty"); else { int i = 0; String[] s = new String[n]; while (s1.hasMoreTokens()) { s[i++] = s1.nextToken(); } int j = 0; for (i = 0; i < n; i++) { if (i >= start && i <= end) { System.out.print(s[end - j++] + " "); } else System.out.print(s[i] + " "); } } } } }
StringTokenizer心得
1. Java StringTokenizer 属于 java.util 包,用于分隔字符串
StringTokenizer(String str) :构造一个用来解析 str 的 StringTokenizer 对象。
java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)
2. 多个分隔符的场合,也可以直接获得需要的结果。
比如
I have an apple!
含有多个空格可返回
I
have
an
apple!
3. StringTokenizer(String str, String delim) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符。
对于ip地址可能可以用上。
4. 对比String.Split()使用正则表达式,StringTokenizer使用逐字分裂的字符效率可能更高。
英文单词字符串倒序输出 正则表达式
实现:
1) 输入一个英文短句,指定单词倒叙输出的起点和终点
2) 按照指定顺序输出
3) 输入无效是,输出EMPTY
4) 使用正则表达式
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String s = new String(sc.nextLine());
int start = sc.nextInt();
int end = sc.nextInt();
String regExp = "[\\S]+";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(s);
List<String> a1 = new ArrayList<String>();
while (m.find()) {
a1.add(m.group(0));
}
int n = a1.size();
if (end > n - 1 || start >= end)
System.out.println("Empty");
else {
int j = 0;
for (int i = 0; i < n; i++) {
if (i >= start && i <= end)
System.out.print(a1.get(end - j++) + " ");
else
System.out.print(a1.get(i) + " ");
}
}
}
}
使用心得:
1. 用/S来匹配非空字符
2. 用+来表示一个或者多个
3. 用上述两点来匹配英文单词,
避免单词之间有多个空格的情况,用split方法提取到空格的问题。