字符串作业

1  给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置.

* 如:"abcd23abc34bcd"中,"bc"子串的出现位置为: 1,7,11.字符串和子串均由用户输入
*
* 考察String类中的哪个方法?
* int index = str.indexOf(subStr, fromIndex);
* 返回指定子字符串subStr在此字符串str中第一次出现处的索引,从指定的索引开始。

/**
 * 给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置.
 * 如:"abcd23abc34bcd"中,"bc"子串的出现位置为: 1,7,11.字符串和子串均由用户输入
 *
 * 考察String类中的哪个方法?
 *      int index = str.indexOf(subStr, fromIndex);
 *      返回指定子字符串subStr在此字符串str中第一次出现处的索引,从指定的索引开始。
 */
public class Homework01 {
    public static void main(String[] args) {

        // 字符串"abcd23abc34bcd"
        String str = "abcd23abc34abcd";

        // 判断以上字符串中是否有子字符串:"bc",如果有,输出它的位置
        String subStr = "abc";


        // 获取子字符串在当前字符串中第一次出现处的下标
        //int firstIndex = str.indexOf(subStr);
        //int firstIndex = str.indexOf(subStr, 0);
        //System.out.println(firstIndex); // 1,表示"bc"在"abcd23abc34bcd"中第一次出现处的下标是1

        //int firstIndexFromTwo = str.indexOf(subStr, 2);
        //System.out.println(firstIndexFromTwo); // 7

        // 指定一个起点,从0下标开始
        int fromIndex = 0;
        while(true){
            // 从指定fromIndex下标开始往后找subStr第一次出现处的下标
            int index = str.indexOf(subStr, fromIndex);
            // 当返回的下标是负数的时候,表示str中已经没有subStr了。
            if(index < 0) {
                // 循环结束
                break;
            }
            // 程序能够执行到此处说明index是存在的
            System.out.println(index);
            // 变更fromIndex的值
            fromIndex = index + subStr.length();
        }
    }
}


2 给定一个由数字组成的字符串,如:"1239586838923173478943890234092",统计出每个数字出现的次数

    public static void main(String[] args) {

        String str = "45645645453145345621200000";

        // 转换成char数组
        char[] arr = str.toCharArray();

        // 排序
        Arrays.sort(arr);

        /*for(char c : arr){
            System.out.print(c);
        }*/

        // 将char数组转换成新字符串
        String newStr = new String(arr);
        System.out.println(newStr); //0011222233333344456778888899999

        // 数字其实就是1-9
        // 如果是字符char的话,那也一定是'1' ~ '9'
        // 0011222233333344456778888899999
        // 2的起始下标:4
        // 2的结束下标:7
        // 2的数量是多少:7 - 4 + 1

        /*int fromIndex = newStr.indexOf("2");
        int endIndex = newStr.lastIndexOf("2");
        int size = endIndex - fromIndex + 1;
        System.out.println(size);*/

        // 如果有2的时候才会统计数量!
        /*if(newStr.contains("2")){
            int fromIndex = newStr.indexOf("2");
            int endIndex = newStr.lastIndexOf("2");
            int size = endIndex - fromIndex + 1;
            System.out.println(size);
        }*/

        // 字符可能是'0'~'9'
        for(int i = 0; i <= 9; i++){
            String subStr = i + "";
            if(newStr.contains(subStr)){
                int fromIndex = newStr.indexOf(subStr);
                int endIndex = newStr.lastIndexOf(subStr);
                int size = endIndex - fromIndex + 1;
                System.out.println(subStr + "出现的次数是:" + size);
            }
        }
    }

3 统计我们一个字符串里面出现的字母以及出现的其他符号各有多少个

 public static void main(String[] args) {

        //原始字符串
        //String str = "fdsjaJK发大水发大水FL范德萨发的DS范德萨发生Afd发的撒个梵蒂冈sjaklFJDKSA";
        String str = "你好,a中国!b";

        //char数组
        char[] arr = str.toCharArray();

        // 对char数组遍历,然后统计数量
        int count1 = 0;
        int count2 = 0;
        for(char c : arr){
            if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
                // 认为是字母
                count1++;
            }else{
                // 不是字母也需要统计
                count2++;
            }
        }

        System.out.println("字母的数量是:" + count1);
        System.out.println("其它字符数量是:" + count2);
    }

4 验证for循环打印数字1-9999所需要使用的时间

 public static void main(String[] args) {

        long begin = System.currentTimeMillis();
        for(int i = 1; i <= 9999; i++){
            System.out.println(i);
        }
        long end = System.currentTimeMillis();
        //打印1~9999耗费的时间为148毫秒
        System.out.println("打印1~9999耗费的时间为"+(end - begin)+"毫秒");
    }

5 编写程序完成字符串翻转:"abcdef"翻转为"fedcba"

 public static void main(String[] args) {

        String str = "abcdef";

        // 创建一个StringBuilder对象
        StringBuilder sb = new StringBuilder(str.length());

        // 翻转
        for(int i = str.length() - 1; i >= 0; i--){
            //确定下标没问题
            //System.out.println(i);
            sb.append(str.charAt(i));
        }

        System.out.println(sb);
    }

6. 用StringBuilder 或StringBuffer:把字符串“ABCDE”,转变成字符串“A,B,C,D”

 public static void main(String[] args) {

        String s = "ABCDEF";

        //StringBuilder长度分配多长比较合适呢?
        StringBuilder sb = new StringBuilder(s.length() << 1 - 1);
        //StringBuilder sb = new StringBuilder(s.length() * 2 - 1);

        for(int i = 0; i < s.length(); i++){
            //System.out.println(s.charAt(i));
            sb.append(s.charAt(i));

            if(i != s.length() - 1) { // 不是最后一个元素的时候,加逗号!
                sb.append(",");
            }
        }

        System.out.println(sb);
    }

7定义一个Person类,属性包括:

* 姓名、年龄、性别。
* 性别有三个值,分别是:男、女、中性。请使用枚举类型设计性别。
* 并编写测试程序创建Person对象,访问属性。

    public static void main(String[] args) {
        Person p1 = new Person("金星", 45, Sex.中性);

        // 访问属性
        System.out.println("姓名:" + p1.getName());
        System.out.println("年龄:" + p1.getAge());
        System.out.println("性别:" + p1.getSex());
    }

public class Person {

    private String name;
    private int age;
    private Sex sex;

    public Person() {
    }

    public Person(String name, int age, Sex sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }
}
/**
 * 枚举类型
 */
public enum Sex {
    男, 女, 中性
}
原文地址:https://www.cnblogs.com/dupeilin/p/12984700.html