首页 > 其他分享 >String-2

String-2

时间:2024-05-28 17:13:21浏览次数:23  
标签:String System 字符串 str println out

public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "abc";
        // 将字符串转换成字节数组
        // 默认按照当前工程的编码转换
        // UTF-8中一个汉字占用3个字节
        // GBK 一个汉字占用2个字节
        byte[] bytes = str.getBytes("UTF-8");
        System.out.println(bytes.length);
//        for (byte b : bytes) {
//            System.out.println(b);
//        }

        // 将字节数组转换成字符串
//        String s = new String(bytes);
        // 指定编码转换
//        String s = new String(bytes, "utf-8");
        // 截取部分字节数组
        String s = new String(bytes, 0, 3, "utf-8");
        System.out.println(s);
        // 转换成大写
        System.out.println(str.toUpperCase());
        // 转换成小写
        System.out.println(str.toLowerCase());
    }

练习:输入一个字符串和一个数字,数字表示字节的个数。按照指定字节个数截取字符串。字符串采用GBK编码。

中国split 2--> 中 5 -->中国s 3 ->中

public static void main(String[] args) throws UnsupportedEncodingException {
//        输入一个字符串和一个数字,数字表示字节的个数。按照指定字节个数截取字符串。字符串采用GBK编码。
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        int n = scanner.nextInt();
        // 将用户输入的字符串转换成字节数组
        byte[] bs = str.getBytes("gbk");
        // 判断截取的字节个数是否合法
        if (n < 0 || n > bs.length) return;
        // 按照指定的字节个数进行截取
        String sub = new String(bs, 0, n, "gbk");
//        System.out.println(sub);

        // 判断是否有乱码
        int index = sub.length() - 1;
        if (sub.charAt(index) != str.charAt(index)){
            sub = new String(bs,0,n - 1,"gbk");
        }
        System.out.println(sub);
    }
		String str = "abgrgrbfrhc";
        // 字符串的哈希码是固定不变的
        // 同一个字符串在任何条件下的哈希码一定是相同的,因为字符串是被共享的,所以要保证地址值一样
        System.out.println(str.hashCode());

        // 获取指定元素第一次出现的索引
        // 如果找不到就返回-1
        System.out.println(str.indexOf("abc"));
        // 从fromIndex开始向后找
        System.out.println(str.indexOf("gr",4));

练习:输入一个字符串以及一个子串,打印这个子串在字符串中出现的所有的位置

private static void method() {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        String subStr = scanner.next();
        // 子串的位置
        int index = 0;
        while (index < str.length()){
            index = str.indexOf(subStr,index);
            if (index != -1){
                System.out.println(index);
                index++;
            }else break;
        }
    }
		String str1 = "abcdefga";
        String str2 = new String("abc");
        // intern()返回这个字符串的字面量值
        System.out.println(str1 == str2.intern());
        // 判断字符串是否为空  就是底层字节数组长度是否是0
        System.out.println(str1.isEmpty());
        // 判断字符串是否为空或者全是空格
        System.out.println(str1.isBlank());
        // 获取指定元素最后一次出现的索引
        System.out.println(str1.lastIndexOf('a'));
        // 从fromIndex索引向前找
        System.out.println(str1.lastIndexOf('a',5));
        // 替换字符
        System.out.println(str1.replace('a','+'));
        // 截取字符串  从beginIndex开始截取到字符串的最后
        System.out.println(str.substring(3));
        // 从beginIndex截取到endIndex  包头不包尾
        System.out.println(str.substring(3,5));
        // 删除字符串两端的空格
        System.out.println(str.trim());

        // 将int类型转换成字符串
        String s = String.valueOf(10);

        Object obj = new Object();
        // 获取对象的地址
        String s1 = String.valueOf(obj);
        System.out.println(s1);

3 正则表达式

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

判断一个字符串是否是手机号或者是否是字母等模糊操作,可以使用正则表达式。来指定字符串的规则(格式)进行匹配。

public static void main(String[] args) {
        // 判断一个字符串是否是abc
        String str = "a4w";
        // 指定规则
//        Pattern pattern = Pattern.compile("abc");
//        // 将规则和要判断的字符串进行关联
//        Matcher matcher = pattern.matcher(str);
//        // 进行判断  匹配上就是true,否则就是false
//        System.out.println(matcher.matches());

        // 匹配字符串  第一个字符是 a/b/c  第二个字符  1/4/6/8   第三个 q/w/e
        Pattern p = Pattern.compile("[abc][1468][qwe]");
        Matcher matcher = p.matcher(str);
        System.out.println(matcher.matches());
        // 简化格式
        System.out.println(str.matches("[abc][1468][qwe]"));

        // 匹配由一个小写字母组成的字符串
        // 如果是连续的内容,可以用  - 连接
        // a-z 小写字母    m - p
        // 0-9 数字
        System.out.println(str.matches("[a-z]"));

        // 判断由一个字符组成的字符串,这个字符不是a/b/c
        System.out.println(str.matches("[^abc]"));
    }

image-20240312150213790

// 匹配由3个字符组成的字符串,这个字符串开头是数字,结尾是字母
        // .   通配符  可以表示任意一个字符
        // \d 代表 0-9
        // \s 代表空格  制表符 回车 换行 分页 都属于空格
        // \w [a-zA-Z_0-9]
        System.out.println(str.matches("\\d.[a-zA-Z]"));

        // 匹配  .
        System.out.println(str.matches("\\."));
        // 匹配 \
        System.out.println(str.matches("\\\\"));
  • 数量词
// 数量词
        // 匹配 ab abb abbb abbbb...
        // + 表示之前的字符至少出现1次    >= 1
        System.out.println(str.matches("ab+"));

        // 匹配由字母开头后续是数字的字符串
        System.out.println(str.matches("[a-zA-Z]\\d+"));

        // 由数字作为开头和结尾的字符串  89
        // * 表示之前的字符可有可无   >= 0
        System.out.println(str.matches("\\d.*\\d"));
        
        // 匹配+
        System.out.println(str.matches("\\+"));
        // 匹配*
        System.out.println(str.matches("\\*"));
        
        // 匹配一个不超过两位的数字组成的字符串
        // ? 表示之前的字符最多出现一次     <= 1
        System.out.println(str.matches("\\d\\d?"));

练习:

判断这个字符串是否是一个小数

5.23 5.0000000 00.23 不是 10. 不是 -5.67 是

		// 匹配小数  
        System.out.println(str.matches("-?0\\.\\d+") | str.matches("-?[1-9]\\d*\\.\\d+"));
		// 匹配由5个数字组成的字符串
        // {n} 表示前面的字符出现恰好是n次   ==n
        System.out.println(str.matches("\\d{5}"));

        // 匹配由至少5个数字组成的字符串
        // {n,} 表示前面的字符至少出现n次   >=n
        System.out.println(str.matches("\\d{5,}"));

        // 匹配由5-8个数字组成的字符串
        // {n,m} 表示这个字符要出现至少n次,但不超过m次  n <= x<= m
        System.out.println(str.matches("\\d{5,8}"));

练习: 输入一个字符串作为密码。要求是6-10位,由大写字母,小写字母,数字和空格组成。至少出现两种字符。

public static boolean checkPwd(String password){
        // 密码的长度是 6 - 10位
        if (!password.matches("[a-zA-Z\\d ]{6,10}"))
            return false;
        // 记录出现的字符的类型
        int count = 0;
        // 判断是否出现了小写字母
        if (password.matches(".*[a-z].*"))
            count++;
        // 判断是否出现了大写字母
        if (password.matches(".*[A-Z].*"))
            count++;
        // 判断是否出现了空格
        if (password.matches(".* .*"))
            count++;
        // 判断是否出现了数字
        if (password.matches(".*\\d.*"))
            count++;
        return count >= 2;
    }
// 判断一个字符串中是否出现了3个及以上的连续数字
        // 正则中判断 >= n  只需要判断=就可以   hbbhf567878gyhjn
        System.out.println(str.matches(".*\\d{3}.*"));
        // 判断字符串中是否出现了2个及以上的数字 rfegerg9grgrg8
        System.out.println(str.matches(".*\\d.*\\d.*"));
  • 捕获组
// 判断一个字符串中是否含有2个及以上的htrhresdg
        // () 在正则中表示捕获组
        // 捕获组可以看作一个字符进行操作
        // \\n表示引用编号为n的捕获组
        // 正则表达式会对捕获组进行自动的编号
        // 编号是从1开始的
        // 捕获组的编号是从 ( 出现的位置开始计算的
        // (A((BC)D(E))F)(G)
        // \\1 A((BC)D(E))F
        // \\2 (BC)D(E)
        // \\3 BC
        // \\4 E
        // \\5 G
        System.out.println(str.matches(".*(htrhresdg).*\\1.*"));

        // 判断叠字
        System.out.println(str.matches("(.)\\1+"));
        // AABB结构
        System.out.println(str.matches("(.)\\1(.)\\2"));
        // ABAB结构
        System.out.println(str.matches("(..)\\1"));
  • replaceAll
String str1 = "tht;btgbt;grgr;grgr";
        // 将所有的数字替换成-
        // 参数一是正则表达式
        // 参数二是要替换的字符
        System.out.println(str1.replaceAll("\\d","-"));
        // 提取字符串中所有的数字
        System.out.println(str1.replaceAll("\\D",""));
        // 替换字符串中所有的非字母
        System.out.println(str1.replaceAll("[^a-zA-Z]",""));
  • 练习:输入一个字符串,提取其中所有的数字并排序
 // 输入一个字符串,提取其中所有的数字并排序
        String str = new Scanner(System.in).next();
        // 提取数字
        str =  str.replaceAll("\\D","");
        // 把字符串转换成字符数组
        char[] chars = str.toCharArray();
        // 排序
        Arrays.sort(chars);
        System.out.println(chars);
  • 输入一个字符串,统计每一个字符出现的次数
//        输入一个字符串,统计每一个字符出现的次数
        // aabbbccdda
        String str = new Scanner(System.in).next();
        while (str.length() != 0){
            // 获取替换之前的字符串长度
            int oldLen = str.length();
            // 获取字符串的第一个字符
            char c = str.charAt(0);
            str = str.replaceAll(c + "","");
            // 获取替换之后的字符串长度
            int newLen = str.length();
            System.out.println("字符" + c + "出现的个数是" + (oldLen - newLen));
        }
  • 匹配邮箱

大小写字母数字_组成6,20位@xxx.com

大小写字母数字_组成@xxx.cn

大小写字母数字_组成@xxx.com.cn

System.out.println(str1.matches("\\w{6,20}@\\w+(\\.com)") | str.matches("\\w{6,20}@\\w+(\\.com)?(\\.cn)"));
		String str2 = "小龙女 杨过 尹志平 欧阳锋";
        System.out.println(str2.replaceAll("(.*)(杨过)(.*)(欧阳锋)","$1$4$3$2"));

        // 叠字变成单字
        String str3 = "我我我我爱爱爱爱爱你你你你你你你";
        System.out.println(str3.replaceAll("(.)\\1+","$1"));

split

String str4 = "778jy6666kj5kl6jkgh8gth9678676754";
        // 字符串的分割
//        String[] split = str4.split(",");
//        for (String s : split) {
//            System.out.println(s);
//        }
        // 无论有多少个,放在结尾的分隔符都会被直接切掉
        // 放在开头的分隔符会切出"",有几个切几个
        // 放在中间连接的分隔符,会切出一个""
        String[] split = str4.split("\\d");
        for (String s : split) {
            System.out.println(s);
        }

标签:String,System,字符串,str,println,out
From: https://www.cnblogs.com/460759461-zeze/p/18218456

相关文章

  • RC-u2-2023【STL-string】
    Raicom-2023省赛题目~题意:A:最近出了一个饮料营养等级你们知道吗?例如无糖的饮料是A级,可乐是D级……B:那……无糖可乐是什么级别?C:AD级吧。A:出院!B:出什么院,你也给我进去!以上是某群中一段有趣的对话。请你按照里面的逻辑,在已知某些饮料的等级的情况下,给饮料定级。定级的......
  • mybatis异常: Invalid value type for attribute 'factoryBeanObjectType': java.lang
    问题描述:  springboot3.2.0版本以上编写mapper报错解决方案: 排查mybatilsplus自带的mybatils-spring,重新引入1<dependency>2<groupId>com.baomidou</groupId>3<artifactId>mybatis-plus-boot-starter</artifactId>4......
  • Map<String,?>与Map<String,Object>这两类型作为方法入参的区别
    Map<String,?>与Map<String,Object>这两类型作为方法入参的区别在Java中,Map<String,?>和Map<String,Object>这两种类型的Map有以下区别:Map<String,?>:这是一个只读的Map,你不能向其中添加任何元素,因为在添加元素时,你不知道应该写入什么类型的值。Map<String,Object>:这是一个......
  • golang为什么chan大部分是发送结构体,而不是其它比如string
     typetokenstruct{}typeGroupstruct{cancelfunc(error)wgsync.WaitGroupsemchantokenerrOncesync.Onceerrerror}func(g*Group)done(){ifg.sem!=nil{<-g.sem}g.wg.Done()}在Go语言中,通道(......
  • C++ ─── string的模拟实现
            本博客将简单实现来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。    下期我们继续讲解完整版string的模拟实现(将不再会是浅拷贝了)        说明:下述string类没有显式定义其拷贝构造函数与赋值运......
  • Object 和 String
    APIAPI--ApplicationProgrammingInterface应用程序接口1Object常用方法publicstaticvoidmain(String[]args)throwsCloneNotSupportedException{//Object是java中所有类的顶级父类TestDemotestDemo=newTestDemo();//println中......
  • StringBuffer和StringBuilder方法
    StringBuffer:可变长字符串,jdk1.0提供,运行效率满、线程安全。StringBuilder:可变长字符串,jdk5.0提供,运行效率快、线程不安全。(单线程推荐使用)效率:StringBuilder>StringBuffer>String//验证StringBuilder效率高于StringpublicclassString{publicstaticvoidmain(java.lang.......
  • String案例
    substring方法:截取指定位置的字符串publicclassDemo06{publicstaticvoidmain(String[]args){Stringstr="thisisatext";//1.将str中的单词单独提取出来String[]arr=str.split("");for(Strings:arr){System.out.println(s);}//2.将str中的text替......
  • C++字符串string
    包含头文件:#include<string>C++string与C语言char*之间的相互转换str.c_str()std::string()字符串与float/int之间的相互转换字符串转int/float利用std::stoi将字符串转为整型/转为float型:std::stof,即string-to-floatint/float转字符串std::to_string()......
  • JavaScript 中 toString 的奇妙使用
    JavaScript中的toString()方法,我们通常会一些其他类型的变量,转为字符串类型。但这里还有一些其他奇妙的用法。不同的类型调用toString()会得到不同的结果。我们来一一分析下。1.函数类型我们开发者自定义的函数,和JavaScript官方内置的函数,在调用toString时,输出是不一样......