字符串的基础知识及四道简单的程序题

 String的正常使用

public class Stringbase {
    public static void main(String[] args) {
        //两种创建字符串的方式
        //第一种为直接赋值,存储在串池中,后续不可改变
        //如果还有字符串需要赋值为Hello World,将直接把串池中的数据赋值给新的字符串
        String st1 = "Hello World";
        //第二种类似与数组,在堆中存储,每次new就会创建一个新的空间来存放
        String st2 = new String("Hello World!");
        System.out.println(st1);
        System.out.println(st2);

        //对字符进行拼接
        //用于修改字符串的内容
        char[] chs = {'a' ,'b' ,'c'};
        String st3 = new String(chs);
        System.out.println(st3);

        //ASCII的表示,字节信息转化成字符串
        byte[] bytes = {97,98,99};
        String st4 = new String(bytes);
        System.out.println(st4);

        //字符串的截取(substring),已截取str1的Hello World为例
        String st5 = st1.substring(0,5);//表示截取Hello,包头不包尾
        String st6 = st2.substring(0);//表示从0开始截取,一直截完即Hello World
        System.out.println(st5);
        System.out.println(st6);

        //字符串的替换(replace),以替换Hello World中的World为*****
        String st7 = st1.replace("World" , "***");
        System.out.println(st7);
        String st8 = ("sbfnakfbak Hello World");
        System.out.println(st8);
        //可以定义一个数组作为需要替换的玩意
        String[] arr ={"sb" , "md" , "tmd" , "World"};
        for (int i = 0; i < arr.length; i++) {
            st8 = st8.replace(arr[i] , "***");
        }
        System.out.println(st8);
    }
}

以下两种为较为常见的java自带的方法

StringBuilder的使用

StringBuilder为String拼接的原理

public class StringBuilder1 {
    public static void main(String[] args) {
        //类名不可为StringBuilder
        //该方法在java.long包中,long包是java的核心语法包,使用无需导包
        //一般在字符串的拼接和反转时使用
        //可以随时改变数值,相比传统定义方法,运行更快,占用内存更小,但没有之前的方法安全
        //创建对象
        StringBuilder sb = new StringBuilder("sfaf");

        //添加字符串
        sb.append("abc");
        System.out.println(sb);

        //反转字符串,引用方法就直接反转了
        sb.reverse();
        System.out.println(sb);

        //获取长度
        int len = sb.length();
        System.out.println(len);

        //将StringBuilder转化为String类型
        String str = sb.toString();
        //使用完该对象后,变成String类型
        System.out.println(str);
    }
}

StringJoiner的使用

import java.util.StringJoiner;

public class StringbaseJoiner {
    public static void main(String[] args) {
        //创建对象并规定格式,也可以不给后面符号,这样就只有间隔符
        //jdk8开始使用,在拼接方面,比StringBuilder便捷
        StringJoiner sj = new StringJoiner("," , "[" , "]");

        //添加数据
        sj.add("aaaa").add("bbbbb").add("c").add("d");

        //打印结果
        System.out.println(sj);

        //打印长度
        int len = sj.length();
        System.out.println(len);

        //打印字符串
        //System.out.println(sj.toString());
        String s = sj.toString();
        System.out.println(s);
    }
}

四道程序题

判断键盘输入的字符串中有多少个大写字母,小写字母,数字,其他符号

//导包
import java.util.Scanner;

public class Stringbasetext1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        //给出提示并接收数据
        System.out.println("请输入一个字符串");
        String s = sc.nextLine();
        printstring(s);
        numberstring(s);
    }
    //对一个字符串进行遍历
    public static void printstring(String s){
        //s.length表示为字符串的长度,和数组同理;i为字符串索引的含义
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(i == s.length()-1){
                System.out.print(c);
                System.out.println();
            }else{
                System.out.print(c + " ,");
            }
        }
    }

    //判断字符串中有多少个大写字母,小写字母,数字,其他符号
    public static void numberstring(String s){
        //定义计数器来计算各个字符数量
        int numbercount = 0;
        int bigcount = 0;
        int smallcount = 0;
        int othercount = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            //'9'表示ASCII表中9字符所在的位置(48)
            if(c <= '9' && c >= '0'){
                numbercount++;
            }else if( c >= 'A' && c <= 'Z'){
                bigcount++;
            }else if( c >= 'a' && c <= 'z'){
                smallcount++;
            }else{
                othercount++;
            }
        }
        System.out.println("数字一共有" + numbercount);
        System.out.println("大写字母一共有" + bigcount);
        System.out.println("小写字母一共有" + smallcount);
        System.out.println("其他字符一共有" + othercount);
    }
}

String的字符串反转

//导包
import java.util.Scanner;

public class Stringbasetext2 {
    public static void main(String[] args) {
        //创建对象并接受键盘输入的对象
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        //引用方法
        str = reversal(str);
        //打印结果验证
        System.out.println(str);
    }

    //将字符串反转的方法
    public static String reversal(String str){
        String result = "";
        //将字符串中的每一位反着传输到字符c中
        //每一次循环将c累加给循环外定义的变量result
        for(int i = str.length()-1; i >= 0; i--){
            char c = str.charAt(i);
            result += c;
        }
        return result;
        /*
        char[] c = new char[str.length()];
        int j = 0;
        //将字符串中的每一位反着传输到字符数组c中
        for(int i = str.length()-1; i >= 0; i--){
            c[j] = str.charAt(i);
            j++;
        }
        //将str的内容清空用来存储结果
        str = "";
        for(int i = 0; i < c.length; i++){
            //将字符数组c的每一个数累加到结果字符串res中
            str += c[i];
        }
        return str;
        */
    }
}

键盘输入一个数,要求将其转化为大写汉字(零,壹,贰,叁,肆,伍,陆,柒,捌,玖)且最大不超过7位数并填补单位,空余的位数用零填补

//导入键盘录入包
import java.util.Scanner;

public class Stringbasetext3 {
    public static void main(String[] args) {
        //创建对象,并给出提示
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个不超过7位数的正整数");
        int s = 0;
        //如果数据不合法,将一直循环
        while (true) {
            //接收数据并判断数据合法性
            s = sc.nextInt();
            if (s >= 0 && s <= 9999999 ) {
                break;
            }
            System.out.println("数据不合法,请重新输入");
        }

        //将对应的数字转化成对应的汉字大写,并补零到7位
        //计算输入的数一共有多少位
        int len = numbercount(s);
        System.out.println(len);
        //定义一个StringBuilder数据类型来记录结果,便于节省空间
        StringBuilder sb = new StringBuilder();
        //通过changebig方法将int转变为汉字大写
        while (s != 0) {
            sb.append(changebig(s % 10));
            s = s / 10;
        }
        //对不满7的数进行补零
        for (int i = 0; i < 7 - len; i++) {
            sb.append("零");
        }
        //将sb反转才是需要的数
        sb.reverse();
        //将StringBuilder型转变为String方便后面程序的进行
        String str = sb.toString();

        //定义单位数组来对应这七位数
        String[] arr ={"佰", "拾" , "万" , "仟" , "佰", "拾", "元"};
        for (int i = 0; i < arr.length; i++) {
            //快速把字符串变为字符数组:char[] arr = str.toCharArray();
            //str.charAt(i)表示为在str字符串中的第i个索引拿出来作为一个字符
            System.out.print(str.charAt(i));
            System.out.print(arr[i]);
        }
        System.out.println();
    }

    //计算一个整数一共有多少位
    public static int numbercount(int number) {
        int length = 0;
        while (number != 0) {
            number /= 10;
            length++;
        }
        return length;
    }

    //将对应的数字转化成对应的汉字大写
    public static String changebig(int ge){
        //根据ASCII表,将字符转化成整数,用来当做arr数组中的索引
        String[] arr = {"零" , "壹" , "贰" , "叁" , "肆" , "伍" 
                , "陆" , "柒", "捌", "玖"};
        return arr[ge];
    }
}

生成四位数的验证码,范围为A-Z,a-z,0-9;其中至少一个数字且位置随机

//导包
import java.util.Random;

public class Stringbasetext4 {
    public static void main(String[] args) {
        //创建对象
        Random rand = new Random();


        //创建随机的大小写字母的数字的范围字符串
        StringBuilder sb = new StringBuilder();
        //将大小写字母,放入sb中
        for (int i = 0; i < 26; i++) {
            char c1 = 'A';
            char c2 = 'a';
            sb.append((char) (c1 + i));
            sb.append((char) (c2 + i));
        }//AaBb.....
        //在字符串的末尾加入0-9
        for (int i = 0; i < 10; i++) {
            char c1 = '0';
            sb.append((char) (c1 + i));
        }
        System.out.println(sb);

        //创建一个reuslt来存放验证码
        StringBuilder result = new StringBuilder();
        //生成随机的验证码
        for (int i = 0; i < 4; i++) {
            int num = rand.nextInt(sb.length());
            result.append(sb.charAt(num));
        }
        System.out.println(result);

        //随机出一个数字,随机替换result中的一个数据
        int temp = rand.nextInt(10) + 52;
        //用c记录sb中随机出的数字
        char c = sb.charAt(temp);
        System.out.println(c);
        //用随机数来决定替换哪一个
        int r = rand.nextInt(4);
        System.out.println(r);
        //截取在result中r索引前面和后面的字符
        //要截取需要先将result转化为字符串
        StringBuilder resultend = new StringBuilder();
        if (r == 0) {
            resultend.append(c);
            resultend.append(result.toString().substring(1));
        }else if (r == 3) {
            resultend.append(result.toString().substring(0,3));
            resultend.append(c);
        }else{
            resultend.append(result.toString().substring(0,r));
            resultend.append(c);
            resultend.append(result.toString().substring(r + 1));
        }
        //将最终结果打印
        String str = resultend.toString();
        System.out.println(str);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值