JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较

简介: JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较 过节耽误了几天,我们继续JAVA之旅一.

JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较


过节耽误了几天,我们继续JAVA之旅

一.String概述

String时我们很常用的数据类型,他也是一个类的使用

这里写图片描述

我们来看

package com.lgl.hellojava;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {
        /**
         * String
         */
        /**
         * s1是一个类类型变量,“abc”是一个对象 字符串最大的特点是,一旦被初始化,就不可以被改变
         */
        String s1 = "abc";
        s1 = "kk";
        System.out.println(s1);
    }
}

为什么说初始化之后不可以改变,我们又重新赋值,输出多少?肯定是kk,那不是变了吗?

  • 这里注意,他是s1变了,但是这个abc这个对象还是abc

这个要搞清楚,s1开始指向的abc后来指向kk而已

我们再来对比一下

package com.lgl.hellojava;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {

        String s1 = "abc";
        String s2 = new String("abc");

        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

输出的结果?

这里写图片描述

我们可以发现,==是不正确的,因为他是比较地址,而equals,则是比较值

为什么?

  • String类复写了object类中的equals方法,定义了自己独特的内容,该方法用于判断字符串是否相同

那s1和s2有什么区别?

  • s1代表一个对象
  • s2代表两个对象(new 和 abc)

二.String常用方法

我们知道了String的基本概述了,那我们就可以开始来学习他的一些常用的方法了,我们还是以例子为准

package com.lgl.hellojava;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {

        String s1 = "abc";
        String s2 = new String("abc");

        String s3 = "abc";

        System.out.println(s1 == s2);
        System.out.println(s1 == s3);
    }
}

这里大家知道输出的是什么嘛

这里写图片描述

s1 = s3 为true是因为当内存中存在了对象就不会再创建了

String是用于描述字符串事物,那么它就提供了多个方法的对字符串进行操作

常见的操作有哪些?我们来分析一下

  • 1.获取
    • 字符串中包含的字符数,也就是字符串的长度,也就是int length()获取长度
    • 根据位置获取位置上的某个字符,也就是char charAt(int index)
    • 根据字符获取该字符在字符串的位置 int indexOf(int ch),返回的是ch在字符串中第一次出现的位置
    • int indexOf(int ch , int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置
    • 根据字符串获取该字符在字符串的位置 int indexOf(String str),返回的是ch在字符串中第一次出现的位置
    • int indexOf(String str , int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置
  • 2.判断

    • 字符串是否包含某一个子串

      boolean contains(str):判断字符串是否存在
      特殊之处:indexOf(str)可以索要str第一次出现的位置,返回-1的话,表示str不再字符串中存在,索要,也可以用于对指定判断是否包含,if(str.indexOf(“aa”) != -1)

    • 字符串中是否有内容

      Boolean isEmpty():原理就是判断长度是否为0

    • 字符串是否是以指定的内容开头

      boolean startWith(String str)

    • 字符串是否是以指定的内容结尾

      boolean startWith(String str)

  • 3.转换

    • 将字符数组转换成字符串

      构造函数String(char [])
      构造函数(char [] , offset ,count)将字符数组中的一部分转成字符串
      静态方法static String copyValueOf(char [] )
      静态方法static String copyValueOf(char [],int offset,int count )

    • 将字符串转换成字符数组

      char [] toCharArray()

    • 讲字节数组转成字符串

      构造函数String(byte[])
      构造函数(byte[] , offset ,count)将字节数组中的一部分转成字符串

    • 将字符串转成字节数组

      byte [] getBytes()

    • 将基本数据类型转换成字符串

      String valueOf(xxx);

  • 4.替换

    • String replace(oldchar,newchar);
  • 5.切割

    • String [] split(regex);
  • 6.子串

    获取字符串中的一部分
    String subString(begin)
    String subString(begin,end)

  • 7.大小写转换,去除空格,比较

    • 将字符串转换成大小写

      String toUuperCase()
      String toLowerCase();

    • 将字符串两端的多个空格去掉

      String trim();

    • 对两个字符串进行自然顺序的比较

      int compareTo(String)

我们可以对获取做一个小演示

package com.lgl.hellojava;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {

        method_get();

    }

    /**
     * String操作演示
     */
    public static void method_get() {
        String str = "abcdef";

        //长度
        sop(str.length());
        //根据索引获取字符
        //当访问到字符串中不存在角标的时候会发生错误:StringIndexOutOfBoundsException角标越界
        sop(str.charAt(3));
        //根据字符获取索引
        //没有角标不会报错,返回-1
        sop(str.indexOf('d'));

        //反向索引一个字符出现的位置
        sop(str.lastIndexOf('c'));
    }

    // 输出语句
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}

输出的结果

这里写图片描述

我们再来看看判断的小例子

    /**
     * 判断
     */
    public static void method_is() {
        String str = "LiuGuiLin";
        // 判断是以Liu开头
        sop(str.startsWith("Liu"));
        // 判断是以Lin结尾
        sop(str.endsWith("Lin"));
        // 判断是否存在Gui
        sop(str.contains("Gui"));

    }

我们的输出

这里写图片描述

字符串和字节数组在转换过程中是可以指定编码表,我们可以看一下转换的小例子


    /**
     * 转换
     */
    private static void method_trans() {
        // 字符数组
        char[] arr = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
        // 转换成字符串
        String str = new String(arr);
        sop("str = :" + str);

        // 截取
        String str1 = new String(arr, 1, 3);
        sop("str1 = :" + str1);

        String str3 = "ddvdvdv";
        char[] arr3 = str3.toCharArray();
        for (int i = 0; i < arr3.length; i++) {
            sop("arr3 = :" + arr3[i]);
        }
    }

我们再来看下替换的方法

/**
     * 替换
     */
    public static void method_replace() {
        String s = "Hello JAVA";

        // 替换
        String s1 = s.replace('J', 'A');
        //如果要替换的字符不存在,返回的还是原串
        //当然,也可以替换字符串,这里就不演示了
        sop(s1);
    }

输出的结果

这里写图片描述

当然,也是可以替换字符串的,这里就不演示了

我们再来看切割的小例子

/**
     * 切割
     */
    public static void method_split() {
        String string = "zhangsan,lisi,wangwu";
        // 切割
        String[] arr = string.split(",");
        for (int i = 0; i < arr.length; i++) {
            sop("arr = :" + arr[i]);
        }
    }

这里我们按照逗号区分

这里写图片描述

我们再来看下子串

    /**
     * 子串
     */
    public static void method_sub() {
        String ss = "ferfefqwdqXXFV";
        sop(ss.substring(2));
        sop(ss.substring(2, 5));

    }

这个直接截图。很简单

这里写图片描述

好了我们再来演示最后几个方法的功能来结束本篇博客

/**
     * 最后几个
     */
    public static void method_7() {

        String st = "    Hello Java And Android   ";

        // 转换大写
        sop(st.toUpperCase());
        // 转换小写
        sop(st.toLowerCase());
        //去掉空格
        sop(st.trim());

        //比较
        String st1 = "acc";
        String st2 = "aaa";
        //一个相同
        sop(st1.compareTo(st2));


    }

OK,这个也没什么可难的,输出

这里写图片描述

好的,本篇博客就先到这里了

我的群:555974449,欢迎加入

目录
相关文章
|
23天前
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以&#39;\0&#39;结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加&#39;\0&#39;。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。
|
23天前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `&lt;`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。
|
22天前
|
存储
数据存储之数组的特点,长度固定,适应变化需求,集合类特点是空间可变,ArrayList泛型,ArrayList<String> array = new ArrayList<String>()
数据存储之数组的特点,长度固定,适应变化需求,集合类特点是空间可变,ArrayList泛型,ArrayList<String> array = new ArrayList<String>()
|
23天前
|
C++
【C++】string类的使用④(常量成员Member constants)
C++ `std::string` 的 `find_first_of`, `find_last_of`, `find_first_not_of`, `find_last_not_of` 函数分别用于从不同方向查找目标字符或子串。它们都返回匹配位置,未找到则返回 `npos`。`substr` 用于提取子字符串,`compare` 则提供更灵活的字符串比较。`npos` 是一个表示最大值的常量,用于标记未找到匹配的情况。示例代码展示了这些函数的实际应用,如替换元音、分割路径、查找非字母字符等。
|
23天前
|
C++
C++】string类的使用③(修改器Modifiers)
这篇博客探讨了C++ STL中`string`类的修改器和非成员函数重载。文章介绍了`operator+=`用于在字符串末尾追加内容,并展示了不同重载形式。`append`函数提供了更多追加选项,包括子串、字符数组、单个字符等。`push_back`和`pop_back`分别用于在末尾添加和移除一个字符。`assign`用于替换字符串内容,而`insert`允许在任意位置插入字符串或字符。最后,`erase`函数用于删除字符串中的部分内容。每个函数都配以代码示例和说明。
|
23天前
|
安全 编译器 C++
【C++】string类的使用②(元素获取Element access)
```markdown 探索C++ `string`方法:`clear()`保持容量不变使字符串变空;`empty()`检查长度是否为0;C++11的`shrink_to_fit()`尝试减少容量。`operator[]`和`at()`安全访问元素,越界时`at()`抛异常。`back()`和`front()`分别访问首尾元素。了解这些,轻松操作字符串!💡 ```
|
23天前
|
存储 编译器 Linux
【C++】string类的使用②(容量接口Capacity )
这篇博客探讨了C++ STL中string的容量接口和元素访问方法。`size()`和`length()`函数等价,返回字符串的长度;`capacity()`提供已分配的字节数,可能大于长度;`max_size()`给出理论最大长度;`reserve()`预分配空间,不改变内容;`resize()`改变字符串长度,可指定填充字符。这些接口用于优化内存管理和适应字符串操作需求。
|
2天前
|
Java 程序员 调度
Java中的多线程编程:概念、实现及性能优化
【5月更文挑战第85天】本文主要探讨了Java中的多线程编程,包括其基本概念、实现方式以及如何进行性能优化。首先,我们将介绍多线程的基本概念,然后详细讨论如何在Java中实现多线程,包括继承Thread类和实现Runnable接口两种方式。最后,我们将探讨一些提高多线程程序性能的策略,如使用线程池和减少同步开销等。
|
2天前
|
监控 Java 开发者
深入理解Java并发编程:线程池的原理与实践
【5月更文挑战第85天】 在现代Java应用开发中,高效地处理并发任务是提升性能和响应能力的关键。线程池作为一种管理线程的机制,其合理使用能够显著减少资源消耗并优化系统吞吐量。本文将详细探讨线程池的核心原理,包括其内部工作机制、优势以及如何在Java中正确实现和使用线程池。通过理论分析和实例演示,我们将揭示线程池对提升Java应用性能的重要性,并给出实践中的最佳策略。
|
3天前
|
安全 Java 数据处理
Java并发编程:线程同步与协作的深度解析
在探索Java并发编程的海洋中,线程同步与协作的灯塔指引着航向。本文将深入挖掘线程同步机制的核心原理,揭示锁、条件变量等工具如何确保数据的一致性和线程间有序的通信。通过案例分析,我们将解码高效并发模式背后的设计哲学,并探讨现代Java并发库如何简化复杂的同步任务。跟随文章的步伐,您将获得提升多线程应用性能与可靠性的关键技能。 【7月更文挑战第24天】
17 5