字符串算法题一

这个博客主要展示了字符串处理的各种常见操作,包括大小写转换、子串截取、字符串翻转、对称性判断、字符串拆分以及固定格式字符串解析。通过具体的Java代码实现,详细演示了如何使用Java进行字符串的算法操作,例如将"jdk"变为大写,将"test"变为"tset",检查字符串对称性,以及翻转单词字母顺序。此外,还介绍了如何处理和解析特定格式的字符串,将其转化为Person对象。
摘要由CSDN通过智能技术生成

字符串算法题一

public class Demo {
    /*
    1. 编写程序将 “jdk” 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕
     */
    @Test
    public void test1() {
        String str = "jdk";
        System.out.println(str.toUpperCase().substring(1));
    }

    /*
    2.编写程序将String类型字符串”test” 变为 “tset”.
     */
    @Test
    public void test2() {
        String str = "test";
        System.out.println(str.replace("es", "se"));
    }

    /*
    3.写一个方法判断一个字符串是否对称
     */
    @Test
    public void test3() {
        System.out.println("见下面的Demo1");
    }

    /*
    4. String s = "113@ ere qqq yyui"
        请输出所有子串
        113
        ere
        qqq
        yyui
     */
    @Test
    public void test4() {
        String s = "113@ ere qqq yyui";
        String s1 = "113@ ere qqq yyui";
        System.out.println(s.substring(0, 3));
        System.out.println(s.substring(5, 8));
        System.out.println(s.substring(9, 12));
        System.out.println(s.substring(13, 17));
    }

    /*
    5. 编写一个程序,将下面的一段文本中的各个单词的字母顺序翻转,
    “To be or not to be",将变成"oT eb ro ton ot eb."。
     */
    @Test
    public void test5() {
        System.out.println("见下面的Demo2");
    }

    /*
    6. String s=”name=zhangsan age=18 classNo=090728”;
    将上面的字符串拆分,结果如下:
    zhangsan 18 090728
     */
    @Test
    public void test6() {
        String s = "name=zhangsan age=18 classNo=090728";
        char[] chars = s.toCharArray();
        int beginIndex = 0;
        int endIndex = 0;
        int count = 0;
        for (int i = 0; i < chars.length; i++) {
            boolean flag = false;
            if (chars[i] == '=') {
                beginIndex = i + 1;
            }
            if (chars[i] == ' ') {
                endIndex = i + 1;
                count++;
                flag = true;
            }
            while (flag) {
                System.out.print(s.substring(beginIndex, endIndex));
                flag = false;
            }
            if (chars[i] == '=' && count == 2) {
                beginIndex = i + 1;
                System.out.println(s.substring(beginIndex, chars.length));
            }
        }
    }

    /**
     * 7.定义一个方法,传入字符串格式为(idcard:name:age:gender)的分割形式如
     * "120384722312901:kexin:20:1|
     * 3219212131312:haotao:22:1|
     * 120121121312:zhangmeiling:21:2"
     * 将该字符串分解,并将属性赋给定义的Person类的对象上中并输出。
     * 提示:创建的每个Person对象,每个对象有idcard、name、age和gender属性
     */
    @Test
    public void test7(){
        System.out.println("见下面的Demo3");
    }
}
import java.util.Scanner;
/**
 * 3.写一个方法判断一个字符串是否对称
 */
public class Demo1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串,系统会判断其是否对称");
        String str = scanner.next();
        boolean result = false;
        try {
            result = isSymmetry(str);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        System.out.println(result);
    }

    /**
     * @return boolean
     * @Author LiHao
     * @Description 判断一个字符串是否对称
     * @Date 18:36 2022/8/28
     * @Param [str]
     */
    public static boolean isSymmetry(String str) throws Exception {
        boolean flag = true;//定义一个标识,初始值为true
        if (str == null || str.length() == 0) {//判断传入的str合法
            throw new Exception("请输入非空的字符串");
        }
        char[] chars = str.toCharArray();//把字符串转为字符数组
        if(chars.length > 1 ){//判断字符个数大于1
            for (int i = 0; i < (chars.length) / 2; i++) {//正序遍历前一半字符数组
                flag = false;//把标识改为false
                for (int j = chars.length - 1 - i; j >= (chars.length) / 2; j--) {//倒叙遍历后一半数组
                    if (chars[i] == chars[j]) {//如果对称相等,则将标识改为true,跳出内层循环,遍历下一个字符
                        flag = true;
                        break;
                    }
                }
            }
        }else {
            flag = false;
        }
        return flag;
    }
}
/**
 * 5. 编写一个程序,将下面的一段文本中的各个单词的字母顺序翻转,
 * “To be or not to be",将变成"oT eb ro ton ot eb."。
 */
public class Demo2 {
    public static void main(String[] args) {
        String str = "To be or not to be";
        System.out.println(reverse(str));
    }

    public static String reverse(String str) {
        char[] chars = str.toCharArray();
        int middle = chars.length / 2;//中间索引值
        for (int i = 0; i < middle; i++) {
            if (chars[i] != ' ' && chars[i + 1] != ' ') {
                char temp = chars[i + 1];
                chars[i + 1] = chars[i];
                chars[i] = temp;
            }

        }
        for (int i = chars.length - 1; i > middle + 2; i--) {
            if (chars[i] != ' ' && chars[i - 1] != ' ') {
                char temp = chars[i];
                chars[i] = chars[i - 1];
                chars[i - 1] = temp;
            }
        }
        char temp = chars[middle];
        chars[middle] = chars[middle + 2];
        chars[middle + 2] = temp;

        String string = String.valueOf(chars);
        return string;
    }
}
import java.util.Scanner;

import static java.lang.System.*;

/**
 * 7.定义一个方法,传入字符串格式为(idcard:name:age:gender)的分割形式如
 * "120384722312901:kexin:20:1
 * 3219212131312:haotao:22:1
 * 120121121312:zhangmeiling:21:2"
 * 将该字符串分解,并将属性赋给定义的Person类的对象上中并输出。
 * 提示:创建的每个Person对象,每个对象有idcard、name、age和gender属性
 */
    /*
    定义Person类
    属性: String idCard
          String name
          int age
          char gender

    控制台输入固定格式的字符串,用split按要求分割出来,返回一个字符串数组
    然后遍历字符串数组,按索引取出值,通过Person的构造器将从字符串数组中取得值赋上,并打印输出
     */

class Person {
    private String idCard;
    private String name;
    private int age;
    private char gender;

    public Person() {
    }

    public Person(String idCard, String name, int age, char gender) {
        this.idCard = idCard;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Person{" +
                "idCard='" + idCard + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }
}

public class Demo3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(in);
        out.println("请按照这种格式输入字符串(idCard:name:age:gender)");
        String str = scanner.next();
        print(str);
    }
    public static void print(String str) {
        String[] strings = str.split(":");
        String idCard = strings[0];
        String name = strings[1];
        int age = Integer.parseInt(strings[2]);
        char[] chars = strings[3].toCharArray();
        char gender = 0;
        for (int i = 0; i < chars.length; i++) {
            gender = chars[i];
        }
        out.println(new Person(idCard, name, age, gender));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值