Java基础之字符串

Wesley13
• 阅读 758

5.1 字符

字符指的用单引号括起来的单个字母。java中,char 表示字符的数据类型。一个字符在内存中占16位大小的空间(2个字节)。

5.2 字符串

字符串或串是由零个或多个字符组成的有限序列,它是编程语言表示文本的数据类型。

串的两个最基本的存储方式是顺序存储方式和链接存储方式

5.2.1 字符串声明与赋值

String是字符串变量的类型,字符串使用 String 关键字来声明,Java中,字符串一定是双引号括起来的零个或多个字符序列。

在Java 中,像其他原始数据类型一样,在使用字符串对象之前,需要先声明一个字符串变量:

//  String 字符串变量名称;String userName

字符串变量必须赋值后才可以使用,称为字符串对象初始化。初始化有3种方式,分别为 使用 new 运算符,直接赋值和初始化为空。语法格式如下:

Strint studentName = new String("zere");
//或者
String studentName = "zere";
//或者
String studentName = "";
studentName = "zere";

注:null 值和空字符串是不同的,空字符串不仅仅是不含字符,它还需要双引号括起来。而 null 值则是此变量本身就没有引用任何值。

5.2.2 获取字符串长度

length() 方法获取字符串长度,会返回字符串对象中包含的字符个数

5.3 字符串基本操作

5.3.1 字符串连接

String 类提供连接两个字符串的方法 concat();

string1.concat(string2);
//concat() 方法返回一个字符串,将string2添加到string1后面之后形成的新字符串

class threeday 
{
    public static void main(String[] args) 
    {
        String string1 = "Hello,";
        String string2 = "my name is Tom";
        String string3 = string1.concat(string2);
        System.out.println(string3);
    }
}
//  HEllo,my name is Tom

也可以直接使用字符串字面量来调用 concat()方法:

String string2 = "Hello,"concat("my name is Tom");

连接字符串还可以使用“+”,这是一个重载了的运算符,用来直观的连接两个字符串,使用起来比 concat()方法更灵活。

class threeday 
{
    public static void main(String[] args) 
    {
        String string1 = "Hello,";
        String string2 = "my name is Tom";
        String string3 = string1+string2;
        System.out.println(string3);
    }
}
//  HEllo,my name is Tom

当表达式中包含多个加号“+”,并且存在各种数据类型参与运算时,则按照+运算符从左到右进行运算,java会根据+运算符两边的操作数类型来决定是进行算术运算还是字符串连接的运算。

class threeday 
{
    public static void main(String[] args) 
    {
        System.out.println(10+2.5+"price");   //先进行算术运算,再进行字符串拼接
        System.out.println("price"+10+2.5);   //进行字符串连接 
    }
}

//12.5 price
// price102.5

5.3.2 字符串比较

equals() 方法,是比较两个字符串是否相等,返回boolean 值

string1.equals(string2);

equals() 方法会比较两个字符串中的每个字符,相同的字母,如果大小写不同,含义也是不同的

class threeday 
{
    public static void main(String[] args) 
    {
        String string1 = "hello";
        String string2 = "Hello";
        System.out.println(string1.equals(string2));
    }
}

// false

equalsIgnoreCase() 方法,忽略大小写的比较方法,同样返回boolean 值。

class threeday 
{
    public static void main(String[] args) 
    {
        String string1 = "hello";
        String string2 = "Hello";
        System.out.println(string1.equalsIgnoreCase(string2));
    }
}

// true

在比较字符串时,不能使用“==”,因为使用“==”比较对象时,实际上判断的是是否为同一个对象,如果内容相同,但不是一个对象,返回值为 false.

5.3.3 字符串截取

String 类中提供 substring 方法来实现截取功能

String substring(int beginIndex);
//截取从开始位置到结尾

//或者

String substring(int beginIndex,int endIndex);
//截取从指定的开始位置到指定的结束位置

class threeday 
{
    public static void main(String[] args) 
    {
        String string1 = "I love Java!";
        String subs1   = string1.substring(2);  //从位置2截取
        String subs2   = string1.substring(2,6); //截取2-6之间的部分
        System.out.println(subs1);
        System.out.println(subs2);
    }
}

// love Java!
// love

5.3.4 字符串查找

在一个字符串中查找另一个字符串,String类提供了 indexOf() 方法来实现查找功能。

str.indexOf(string substr);
//指定字符串开始位置查找
//或者
str.indexOf(string substr,fromIndex);
//指定字符串并指定开始位置查找

eg:

class threeday 
{
    public static void main(String[] args) 
    {
        String string1 = "I love Java!";
        String string2 = "love";
        int serindex1 = string1.indexOf(string2);    //从开始位置查找“love”字符串
        int serindex2 = string1.indexOf(string2,2);
        //从所引2的位置开始查找“love”字符串
        if(serindex1 >=0){
            System.out.println("love在I love Java!中第"+serindex1+"个位置出现");
        }else{
            System.out.println("love在I love Java!中未出现");
        }
            if(serindex2 >=0){
                System.out.println("从索引2位置开始查找,love在I love Java!中第"+serindex1+"个位置出现");
            }else{
                System.out.println("从索引2位置开始查找,love在I love Java!中未出现");
            }
    }
}
/*
love在I love Java!中第2个位置出现
从索引2位置开始查找,love在I love Java!中第2个位置出现
*/

5.3.5 字符串替换

用一个新字符去替换字符串中指定的所有字符,String 类提供的 replace 方法

string1.replace(char oldchar,char newchar);

string1表示原字符串,用newchar替换string1中所有的oldchar,并返回一个新字符串

class threeday 
{
    public static void main(String[] args) 
    {
        String string1 = "I love Java!";
        char oldchar = 'a';       //被替换字符
        char newchar = 'b';     //替换字符
        String string2 =string1.replace(oldchar,newchar);
        System.out.println("替换后的字符串为:"+string2);
    }
}

//替换后的字符串为:I love Jbvb!

5.3.6 字符串与字符数组

 将字符数组转换为字符串,然后利用字符串对象的属性和方法,进一步对字符串进行处理

class threeday 
{
    public static void main(String[] args) 
    {
        char[] helloArray = {'H','e','l','l','o'};     //定义一个字符数组
        // 将字符数组作为构造函数的参数
        String helloString = new String(helloArray);
        System.out.println(helloString);
    }
}

// Hello

在使用new 运算符创建字符串对象时,将字符数组作为构造函数的参数,可以将字符数组转换为字符相应的字符串。相反,也可以将字符串转换为字符数组,这需要使用字符串对象的一个方法 toCharArray() 。它返回一个字符串对象转换过来的字符数组

class threeday 
{
    public static void main(String[] args) 
    {
        String helloString = "hello";
        char[] helloArray = helloString.toCharArray();
        //将字符串转化为字符数组
        //循环遍历字符数组,并输出数组当中每一个字符元素
        for(int i =0;i<helloArray.length;i++){
            System.out.print(helloArray[i]);
        }
    }
}

// hello

5.3.7 字符串其他常用操作

 String常用方法

Java基础之字符串

5.4 StringBuffer 类

一个String对象的长度是固定的,如果使用String类对字符串进行不同的操作,会产生很多对象,需要另外分配空间。针对这个问题,Java 提供了StringBuffer类,既可以节省空间,又能够改变字符串的内容

5.4.1 认识StringBuffer 类

StringBuffer 类所产生的对象默认有16个字符的长度,内容和长度都可以改变。如果附加的字符超出可容纳的长度,则StringBuffer对象会自动增加长度以容纳被附加的字符。String类型和StringBuffer类型的主要性能区别其实在于String是不可变对象,因此在每次对String类型进行改变时其实都生成了一个新的String对象。而StringBuffer类型则不一样,每次操作结果都会在StringBuffer对象本身进行,不会生成新的对象。所以,在字符串经常改变的情况下使用StringBuffer类型,会让程序的运行效率提高。

5.4.2 StringBuffer 类提供的操作方法

在StringBuffer 对象上有 append() 和 insert() 方法,它们有多种重载形式,可以把不同类型的数据转换为字符序列,然后添加或插入到StringBuffer 对象中。append() 方法总是添加字符串到字符序列的最好,而insert() 方法则将字符或字符串添加到指定位置。

各种StringBuffer 方法

Java基础之字符串

5.4.3 StringBuffer 实例

class threeday 
{
    public static void main(String[] args) 
    {
        StringBuffer sb = new StringBuffer();   //声明一个StringBuffer变量
        sb.append("我");      //将字符串转换为字符数组
        sb.append("爱");
        sb.append("Java");
        System.out.println(sb.toString());

        int i =sb.length();
        System.out.println("StringBuffer的长度是:"+i);
    }
}

// 我爱Java
// StringBuffer的长度是:6

5.4.4 String 类与 StringBuffer 类对比

String类:该类一旦产生一个字符串,其对象就不可以改变,并且字符串的内容和长度也是不变的。如果在程序中需要调用该字符串的信息,就需要调用系统所提供的各种字符串操作方法。通过这些方法来对字符串进行相关操作,不会改变对象实例本身,而是产生了一个新的字符串对象示例,并且系统在为String类分配对象时,也是按照对象所包含的实际字符数来分配的。

StringBuffer类:该类具有缓冲功能。StringBuffer类处理可改变字符串。如果需要修改一个StringBuffer类的字符串,不需要再创建一个新的字符串对象,可以直接在原来的字符串上进行操作。该类中的有些方法和String类不同。系统在为StringBuffer类对象分配内存时,除去当前字节所占有控件外,还另外提供了16个字符大小的缓冲区。Length方法可以返回当前实际所包含的字符串长度,而 capacity() 方法则可以返回当前数据容量和缓冲区容量的和。

非常感谢<从零开始学Java>一书对我的帮助,本文借鉴于此,仅用来学习,回顾,巩固。再次感谢。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
秋刀鱼 秋刀鱼
2年前
Java字符串:内存分析/方法梳理
近期在学习Java字符串,梳理总结一下,更多是关于内存角度去分析,希望对你有帮助。一、Java字符串的特性1.java.lang.String使用的final修饰,不能被修饰2.字符串底层封装了字符数组以及针对字符串数组的操作算法3.Java使用的是Unicode编码方式,任何一个字符对应两个字节的编码4.字符串一旦创建,对象内容不能改变,
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
阿里最新面试必备项之Java的String类,持续更新中!
最新腾讯面试必备项之Java的String类,持续更新中!1.1String的特性String类:代表字符串。Java程序中的所有字符串字面值(如“abc”)都作为此类的实例实现。String是一个final类,代表不可变的字符序列。String字符串是常量,用双引号引起来表示。他们的值在创建之后不能更改。String对象的找字符内容是存储在一个
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Stella981 Stella981
3年前
JavaScript常用函数
1\.字符串长度截取functioncutstr(str,len){vartemp,icount0,patrn/^\x00\xff/,strre"";for(vari
Wesley13 Wesley13
3年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
分布式系统的主键生成方案对比 | 京东云技术团队
UUID​UUID(通用唯一识别码)是由32个十六进制数组成的无序字符串,通过一定的算法计算出来。为了保证其唯一性,UUID规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。