package com.String;public class A {
    public static void main(String[] args) {
        String str = "this is a test of java";
        t1(str);// static方法可直接调用
        t2(str);
        t3(str);
        t4(str);
        t5(str);
        t6(str);
        t8("123321");
    }    // 1.统计该字符串中字母s出现的次数
    public static void t1(String str) {        int num = 0;// 定义一个计数器
        for (int i = 0; i < str.length(); i++) {            char ch = str.charAt(i);// 获取当前位置的字符
            if (ch == 's') {
                num++;// 若有一个S,计数器+1
            }
        }
        System.out.println("字符串中共有:" + num + "个s");
    }    // 2.取出子字符串"test"
    public static void t2(String str) {        int beginIndex = str.indexOf("test");// 子字符串的位置第一次出现的位置
        int endIndex = beginIndex + 4;
        String s = str.substring(beginIndex, endIndex);
        System.out.println(s);
    }    // 3.用多种方式将本字符串复制到一个字符数组Char[]中
    public static void t3(String str) {        // 方法一:Char[] ch=str.toCharArray();
        // 方法二:
        char[] ch = new char[str.length()];// 定义一个数组
        for (int i = 0; i < str.length(); i++) {
            ch[i] = str.charAt(i);// 取出特定位置的字符交给数组
        }
        System.out.println(ch.length + "," + str.length());// 数组长度和字符串长度一致,则说明复制成功

    }    // 4.将字符串中每个单词的第一个字母变成大写, 输出到控制台。
    public static void t4(String str) {
        String[] ss = str.split(" ");// 以空格分出单词,得到字符串数组
        String result = "";        for (int i = 0; i < str.length(); i++) {            char c = ss[i].charAt(0);// 将单词的首字母取出
            String s = String.valueOf(c);// 将字符转为字符串 或者a-97,A-65
            String s1 = s.toUpperCase();// 变为大写
            System.out.println(s1);
            String s2 = s1 + ss[i].substring(1);// ss[i].substring(1):截取出每个单词中除了首字母之外剩下的字符串
            result = result + s2 + " ";
        }
        System.out.println(result);
    }    // 5.实现该字符串的倒序输出
    public static void t5(String str) {
        String s = new StringBuffer(str).reverse().toString();// 匿名对象调用reverse方法逆转之后,变成字符串
        System.out.println(s);
    }    // 6.将本字符串转换成一个字符串数组,要求每个数组元素都是一个有意义的英文单词,并输出到控制台
    public static void t6(String str) {
        String[] ss = str.split(" ");// 用空格分隔
        for (int i = 0; i < str.length(); i++) {            // 判断当前ss[i]是不是有效的单词:
            boolean b = true;// 定义标志量b,默认b有效
            for (int j = 0; j < str.length(); j++) {                if (!((ss[i].charAt(j) >= 'a' && ss[i].charAt(j) <= 'z') || (ss[i]
                        .charAt(j) >= 'A' && ss[i].charAt(j) <= 'Z'))) {
                    b = false;// ss[i]不是单词,只要有一个不是就跳出循环
                    break;
                }
            }            if (b) {
                System.out.println(ss[i]);
            }
        }
        System.out.println("----------");
    }    // 8.判断输入字符串是否为回文(如 12344321、abccba是回文 112233不是)--对折后相同
    public static void t8(String str) {        //方法三:将字符串逆转,和原串相同,则为回文
        //方法二:前一半和后一半字符串做计较
        String s1 = str.substring(0, str.length() / 2);// 前一半字符串
        String s2 = str.substring(str.length() / 2 + (str.length() % 2),                str.length());// 后一半字符串
        String s3 = new StringBuffer(s2).reverse().toString();        if (s1.equals(s3)) {
            System.out.println("true");
        }
    }
}      // 7.实现该字符串的按词倒叙输出。(即输出siht si a tset fo avaj).