Java基本字符串知识以及简单习题解析

目录

1.StringBuilder以及StringJoiner的介绍

1.1 StringBulider

1.2 StringJoiner

2.字符串简单习题解析

2.1 罗马字符转换

2.2 字符串旋转


1.StringBuilder以及StringJoiner的介绍

1.1 StringBulider

一.创建对象

StringBuilder sb = new StringBuilder("abc");

二.主要成员方法

(1)

sb.append(any type); //用以添加元素

sb.append(1);
sb.append(2.6);
sb.append(true);

打印输出结果:abc12.6true

(2)

sb.reverse();//反转

打印输出结果:cba

(3)

int len=sb.length();//获取字符串长度

打印输出结果:3

(4)

String str=sb.toString();//将StringBuilder变回String类型

三.主要应用场景

需要拼接字符或反转字符串时。     //String类型数据无法被更改,故需要更改字符串内容时常使用StringBuilder

1.2 StringJoiner

一.创建对象,并指定中间的间隔符号

StringJoiner sj1 = new StringJoiner("---");//间隔符号

StringJoiner sj2 = new StringJoiner("---","[","]");//间隔符号,开始符号,结束符号

二.主要成员方法

sj1.add("aaa").add("bbb").add("ccc");
sj2.add("aaa").add("bbb").add("ccc");  

注意:StringJoiner的添加元素方法只能添加字符串类型,而StringBuilder的添加元素方法可以添加任意类型数据

打印输出结果:aaa---bbb---ccc    //sj1

                         [aaa---bbb---ccc]   //sj2

三.主要应用场景

可以较快捷地将数组内的元素以特定符号间隔输出(StringJoiner应用较少)

2.字符串简单习题解析

2.1 罗马字符转换

完整代码如下:

import java.util.Scanner;

public class StringTest6 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //使用while循环语句,若输入字符串不满足要求则重复输入
        while (true) {
            System.out.println("请输入一个字符串:");
            String str = sc.next();
            if (checkString(str)) {
                String result = stringChange(str);
                System.out.println(result);
                break;
            } else {
                System.out.println("你所输入的字符串不符合要求");
            }
        }

    }

    //构造一个方法以检验输入的字符串是否满足要求
    public static boolean checkString(String str) {
        if (str.length() > 9) {
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }
        return true;
    }

    //构造一个方法将所给字符串转换为对应罗马字符
    public static String stringChange(String str) {
        //定义一个数组,让索引跟罗马数字产生一个对应关系,即查表法(也可使用switch语句)
        String[] romeNumber = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
        StringBuilder sb = new StringBuilder();//使用StringBuilder以拼接字符
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
                sb.append(romeNumber[c -48]);//c先转换为对应ASCII码值,再进行整型运算。
                                             // c-48是字符c对应romeNumber数组索引
        }
        return sb.toString();

    }
}

2.2 字符串旋转

完整代码如下:

法一:

import java.util.Scanner;

public class StringTest7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入俩个字符串:");
        String str1 = sc.next();
        String str2 = sc.next();
        System.out.println(stringSpin(str1, str2));
    }


    public static boolean stringSpin(String str1, String str2) {
        int count = str1.length();
        while (true) {
            StringBuilder sb = new StringBuilder();
            //旋转字符串
            for (int i = 1; i < str1.length(); i++) {
                char c = str1.charAt(i);
                sb.append(c);
            }
            sb.append(str1.charAt(0));
            //检查旋转后的字符串是否相等
            if (sb.toString().equals(str2)) {
                return true;
            } else {
                str1 = sb.toString();

                count--;
            }
            if (count == 0) {
                return false;
            }
        }
    }
}

法二:

public class StringTest8 {
    public static void main(String[] args) {
        String strA="abcde";
        String strB="bcdea";
        System.out.println(check(strA,strB));
    }

    //检查旋转后的字符串是否相等
    public static boolean check(String strA,String strB){
        for (int i = 0; i < strA.length(); i++) {
            strA=rotate(strA);
            if (strA.equals(strB)){
                return true;
            }
        }
        return false;
    }

    //使用subString截取字符串,把左边的字符截取到右边去
    public static String rotate(String str){
        char start=str.charAt(0);
        String end=str.substring(1);
        return end+start;
    }
}

不难发现,使用subString来截取字符串的写法更加简单且容易理解

法三:

public class StringTest9 {
    public static void main(String[] args) {
        String strA="abcde";
        String strB="bcdea";
        System.out.println(check(strA,strB));
    }

    //检查旋转后的字符串是否相等
    public static boolean check(String strA,String strB){
        for (int i = 0; i < strA.length(); i++) {
            strA=rotate(strA);
            if (strA.equals(strB)){
                return true;
            }
        }
        return false;
    }

    //先将字符串转换为字符数组,然后调整字符数组里的数据,最后把字符数组转换回字符串
    public static String rotate(String str){
        char[] arr=str.toCharArray();
        //拿出左边的字符
        char start=arr[0];
        //将剩余字符依次左移一位
        for (int i = 1; i < arr.length; i++) {
            arr[i-1]=arr[i];
        }
        //将左边的字符放在右边
        arr[arr.length-1]=start;
        //将字符数组转为字符串
        String result=new String(arr);
        return result;
    }
}

也可以利用将字符串转换为字符数组的写法

总结:如果遇到修改字符串内容的问题,有俩种方法,一是使用subString截取,二是变成字符数组

  • 38
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值