实现:
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方法提取到空格的问题。