考核总结

在考核的时候突然发现自己对字符串的掌握不够然后总结一下

一.字符串

字符串(String)是用一对双引号括起来的零个或多个字符组成的有限序列。在Java中,字符串被当作对象来处理。

程序中需要用到的字符串可以分为两大类:

String类:创建之后不会再做修改和变动的字符串常量;

StringBuffer类:创建之后允许再做更改和变化的字符串变量。

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

1.String类字符串

字符串变量必须赋值后才可以使用,这称为字符串对象初始化。

字符串的创建和赋值的方式有三种:

String 字符串变量名;

字符串变量名="字符串常量";

String username="";

username="Tom"

或者

String 字符串变量名="字符串常量";

String SayHello="Hello world";

或者

String studentName=new String("周杰杰");

2.获取字符串的长度

length()方法是用来获取字符串长度的。它会返回字符串对象中所包含的字符的个数,例如:

public class myfirst {

public static void main(String[] args) {

String sayHello="Hello,Welcome to Java!!!";  //创建一个sayHello字符串并赋值

int length=sayHello.length();                  //创建一个变量length存放所获取的字符串长度

System.out.println(length);

}

}

运行结果为:24

注意:字符串中的标点或空格在计算字符串长度时,也要包括在内。

3.字符串的输入

next()和nextLine都是Scanner类中的方法,而且作用都是获取输入的String类型的内容。

具体代码实现:

Scanner scanner=new Scanner(System.in);

String string=scanner.next();

String string1=scanner.nextLine();

那么重点来了,那他们又有什么区别呢?这就要先了解他们的处理机制了。

1.next

next():

它会自动地消除有效字符之前的空格,只返回输入的字符,不会得到带空格的字符串。

也就是说如果输入了一串字符,到了有空格的时候就会停止录入,只录入空格前面的东西,空格后面的东西(包括分隔的空格都会保留在缓存区域)

除了空格以外,Tab键和Enter键都被视为分隔符(结束符)。

2.nextLine()

nextLine():

它返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

也就是说输入一串字符,它就可以接受所有字符包括空格,但是遇到回车Enter就会停止录入,只录入前面的东西。

3.搭配使用

搭配使用:他们也是可以搭配使用的哦。

它们可以单独使用,也可以搭配使用,搭配使用可以处理很多的录入情况。

情况1

如果想录入一个字符串,但是中间有一个空格间隔。

例如:如果想录入:你好 再见。

具体代码实现:

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

//如果想录入:你好 再见

String string = scanner.next();

String string1 = scanner.next();

System.out.println(string);

System.out.println(string1);

//如果没有第二个next(),那么只能输出‘你好’,没有‘再见’

//第一个next()录入‘你好’,然后遇到空格停止,将空格以及后面的‘再见’保存到缓存区,第二个next()则直接跳过空格,录入‘再见’。

//也可以直接用nextLine

    String string2 = scanner.nextLine();

    System.out.println(string2);

}

情况2

如果想录入一个字符串,但是中间有一个回车Enter。

例如:如果想录入:

你好

再见

具体代码实现:

    String string = scanner.next();

    String string1 = scanner.next();

    System.out.println(string);

    System.out.println(string1);

//与上面一样,也是用两个next()。第一个next()录入你好,将回车和‘再见’保存到缓冲区,第二个next()跳过回车,直接录入再见。

//也可以用nextLine()和nextLine()搭配使用

String string2 = scanner.nextLine();

String string3 = scanner.nextLine();

    System.out.println(string2);

    System.out.println(string3);

//第一个nextLine()录入回车之前的‘你好’,遇到回车结束,‘再见’保存到缓冲区,第二个nextLine()直接录入‘再见’。

//也可以用nextLine()和next()搭配使用

String string4 = scanner.nextLine();

String string5 = scanner.next();

    System.out.println(string4);

    System.out.println(string5);

//同样的道理,第一个nextLine()录入回车之前的‘你好’,遇到回车结束,‘再见’保存到缓冲区,第二个next()直接录入‘再见’。

特别注意:nextLine()前面有输入语句怎么解决nextLine()不运行的问题

特别注意:!!!

在录入中间有回车的字符串的时候,不要使用next()和nextLine()的配合,next会将回车之前的字符串录入,将回车以及后面的内容留在缓存区,next()直接去缓存区录入数据,结果上来就碰上了回车,(还没有开始就结束了),那么缓存区回车后面的内容自然就无法接受了

解决方法:可以在next()和nextLine()中间再加一个nextLine(),让新加的这个nextLine()将回车吸收,结束,然后最后的nextLine()就可以直接录入数据了。

代码实现:

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

    String string1= scanner.next();

    String string2= scanner.nextLine();

    String string3= scanner.nextLine();

    System.out.println(string1);

    System.out.println(string3);

}

二.字符串基本操作

Java语言提供了几种对字符串的操作函数或方法

1.字符串连接

最常用对字符串进行的操作之一就是将两个字符串连接起来,合并为一个字符串。

String类提供连接两个字符串的方法concat(),语法格式为:

string1.concat(string2);

concat()方法返回一个字符串,是将字符串string2添加到string1后面之后形成新字符串,例如:

public class myfirst {

public static void main(String[] args) {

String sayHello1="Hello,";        //创建字符串sayHello1、sayHello2并赋值

String sayHello2="Welcome to Java!!!";

String sayHello3=sayHello1.concat(sayHello2);  //将合并后的字符串赋值给sayHello3

System.out.println(sayHello3);

}

}

运行结果为:Hello,Welcome to Java!!!

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

String sayHello3="Hello,".concat("welcome to Java!!!")

连接字符串还可以使用加号“+”运算符。

这是一个重载了的运算符,用来直观地连接两个字符串,它使用起来比concat()方法更加灵活。

例如:

String 字符串3=字符串1+字符串2;

注意:

当表达式中包含多个加号,并且存在各种数据类型参与运算时,则按照加号运算符从左到右进行运算;

Java会根据加号运算符两边的操作数类型来决定是进行算术运算还是字符串连接的运算。

2.字符串比较

(1).比较两个字符串是否相等

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

equalsIgnoreCase()方法,同样返回值为boolean值,使用格式为:

字符串1.equals(字符串2);            //严格比较字符串是否相同

字符串1.equalsIgnoreCase(字符串2);  //忽略字母大小写来进行比较

例如:

public class myfirst {

public static void main(String[] args) {

String sayHello1="HELLO";          //创建两个字符串

String sayHello2="hello";

System.out.println(sayHello1.equals(sayHello2));  //使用equals方法进行严格比较

System.out.println(sayHello1.equalsIgnoreCase(sayHello2));  //使用equalsIgnoreCase方法忽略大小写进行比较

}

}

运行结果为:

false

true

(2).比较两个字符串的大小

我们可以使用compareTo方法比较两个字符串的大小,

(1).若调用方法的字符串比较参数字符串大,返回正整数;

(2).若比参数字符串小,则返回负整数;

(3).若两字符串相等,则返回0;

(4).若两个字符串各个位置的字符都相同,仅长度不同,则返回值为两者长度之差。

public class myfirst {

public static void main(String[] args) {

String sayHello1="HELLO";

String sayHello2="hello";

System.out.println(sayHello1.compareTo(sayHello2));  //比较两个字符串的大小

}

}

3.字符串的查找和截取字符串

(1).查找:

(1).int indexOf(char ch):搜索字符ch出现的第一个索引号,如果没有找到匹配,则返回-1;

(2).int indexOf(char ch,int fromIndex):从fromIndex位置开始搜索字符ch出现的第一个索引号;

(3).int indexOf(String str):搜索字符串str出现的第一个索引号。

例如:

public class myfirst {

public static void main(String[] args) {

String s1="abcdefg";                    //创建字符串s1并赋值

System.out.println(s1.indexOf('c'));    //输出字符'c'的索引号

System.out.println(s1.indexOf('c',5));  //输出索引号为5的字符是否是字符'c'

System.out.println(s1.indexOf("de"));  //输出字符串出现的第一个索引号

}

}

运行结果为:

2

-1

3

(2).截取字符串:

String substring(int index):提取从位置索引开始的字符串部分;

String substring(int beginindex,int endindex):提取beginindex到endindex-1为止的字符串部分。

例如:

public class myfirst {

public static void main(String[] args) {

String s1="abcdefg";

System.out.println(s1.substring(3));      //截取开始位置为3的字符串

System.out.println(s1.substring(2, 5));    //截取开始索引为2,结束索引为5但不包含5的字符串

}

}

运行结果为:

defg

cde

4.字符串替换

字符串替换是用新字符去替代字符串中指定的所有字符,String类提供的replace方法可以实现这种替换。语法格式为:

string1.replace(char oldchar,char newchar)

例如:

public class myfirst {

public static void main(String[] args) {

String s1="abcdeag";

char oldchar='a';        //被替换字符

char newchar='A';        //替换字符

String s2=s1.replace(oldchar, newchar);      //进行替换

System.out.println("替换后的字符串为:"+s2);    //输出新字符串

}

}

运行结果为:

替换后的字符串为:AbcdeAg

5.字符数组转换为字符串

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

public class myfirst {

public static void main(String[] args) {

char []helloArray= {'h','e','l','l','o'};  //声明一个字符数组

String helloString=new String(helloArray);  //将字符数组作为构造函数的参数

System.out.println(helloString);

}

}

运行结果为:

hello

6.字符串转换为字符数组

我们也可以将字符串转换为字符数组,这需要使用字符串对象的一个方法toCharArray()。它返回一个字符串对象转换过来的字符数组。例如:

public class myfirst {

public static void main(String[] args) {

String helloString ="hello";        //声明一个字符串变量并赋值

char []helloArray=helloString.toCharArray(); //进行字符串和字符数组的转换

for(int i=0;i<helloArray.length;i++) {      //for循环输出字符数组

System.out.print(helloArray[i]+" ");

}

}

}

运行结果为:

h e l l o

7.字符串转数字

1、使用包装类的 valueOf() 方法

通过包装类的 valueOf() 方法,可以将字符串转换为想要的包装类,Byte、Short、Integer、Long、Float、Double 都有对应的 ValueOf() 方法。

String str = "123";

Integer a = Integer.valueOf(str);  // 123

Double  b = Double.valueOf(str);    // 123.0

2、使用包装类的 parseXXX() 方法

通过包装类的 parseXXX() 方法,可以将字符串转换为想要的基本数据类型

String str = "456";

int a = Integer.parseInt(str); // 456

int b = Double.parseDouble(str); // 456.0

3、将字符串的字串转化为数字

String str = "123456";

int a = Integer.valueOf(str.substring(0,3)); // 123

int b = Integer.valueOf(str.substring(3,6)); // 456

4、字符转化为数字

String str = "123456";

int a = str.charAt(0) - '0'; // 1

5、数字转化为字符串

1、String的 valueOf() 方法

这是最常用的方法,对于包装类以及基本数据类型都适用。

Integer a1 = 123;

int a2 = 456;

String str1 = String.valueOf(a1); // "123"

String str2 = String.valueOf(a2); // "456"

2、直接拼接空字符串

int a = 123;

String str = a + ""; // "123"

3、包装类的 toString() 方法

注意该方法只适用于包装类,基本数据类型需要先调用包装类的 valueOf() 方法再使用。

Integer a1 = 123;

String str = a1.toString(); // "123"

int a2 = 456;

Integer b = Integer.valueOf(a2);

String str2 = b.toString(); // "456"

三.StringBuilder类

可变字符串,StringBuilder对象的内容可以修改。

打印SrtirngBuilder打印的不是地址值,是属性值。

1.StringBuilder类的常用方法

1)拼接:append()方法

使用append()方法可实现字符串的拼接操作,返回拼接后的StringBuilder对象。

2)反转:reverse()方法

使用reverse()方法可实现StringBuilder字符串的反转操作。

3)删除:delete(int start, int end)方法

删除字符串中指定索引范围为 [start,end) 的所有内容。

Java中大多数范围均为左闭右开区间。

StringBuilder sb = new StringBuilder("hello");

sb.append("world");

sb.delete(5,8);  //删除索引范围为[5,8)内的所有内容,即从w开始删除到l之前

System.out.println(sb);  //输出hellold

4)插入:insert(int start, 任意数据类型)方法

在索引start处开始插入任意数据类型的内容。插入内容的起始索引是start。

StringBuilder sb1 = new StringBuilder("hello");

sb1.insert(2,77);

System.out.println(sb1);  //输出he77llo

sb1.insert(3,"ooo");

System.out.println(sb1);  //输出he7ooo7llo

2.StringBuilder与String的相互转换

1)String转为StringBuilder

① 构造方法StringBuilder(String str)

StringBuilder sb = new StringBuilder("hello");

1

② 字符串拼接方法append(String str)

StringBuilder sb = new StringBuilder();

sb.append("123");

2)StringBuilder转为String

通过StringBuilder对象调用toString()方法

String str = sb.toString();

String、StringBuilder、StringBuffer的区别

String为不可变字符串类,StringBuilder、StringBuffer为可变字符串类。

StringBuilder类性能较高,但存在线程安全问题; StringBuffer类线程安全,但性能较差。

四.StringJoiner

1.StringJoiner 概述

StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。

作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用。

JDK8出现的

2.  StringJoiner 构造方法

方法名 说明

public StringJoiner (间隔符号) 创建一个StringJoiner对象,指定拼接时的间隔符号

public StringJoiner (间隔符号,开始符号,结束符号) 创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号

3. StringJoiner 成员方法

方法名 说明+

public StringJoiner add (添加的内容) 添加数据,并返回对象本身public int length0返回长度(字符出现的个数)public String toString0返回一个字符串(该字符串就是拼接之后的结果)

练习:

public static void main(String[] args) {

// 1.创建一个对象 并指定中间的建个字符

StringJoiner sj = new StringJoiner("---");

// 2. 添加数据

sj.add("aaa").add("bbb").add("ccc");

System.out.println(sj); // aaa---bbb---ccc

// 3.创建另一个对象

StringJoiner sj2 = new StringJoiner(",", "[", "]");

// 4. 添加对象

sj2.add("aaa").add("bbb").add("ccc");

System.out.println(sj2); // [aaa,bbb,ccc]

// 5.打印长度

int len = sj2.length();

System.out.println(len); // 15

// 6.转换字符串

String str = sj2.toString();

System.out.println(str); // [aaa,bbb,ccc]

}

三、总结

1.String

表示字符串的类,定义了很多操作字符串的方法。

1.StringBuilder

一个可变的操作字符串的容器。

可以高效的拼接字符串,还可以将容器里面的内容反转。

1.StringJoiner

JDK8出现的一个可变的操作字符串的容器,可以高效,方便的拼接字符串。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • 这周已经开始做游戏了,在做游戏前,对以前学习的知识点有个简单的总结。 总结如下 1、java跨平台性由字节码文件c...
    橘子骑士阅读 167评论 0 0
  • 封装、继承和多态 封装:把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,提高代码...
    paterL阅读 234评论 0 1
  • 认识java 1.java是一种编程语言,机器语言:010101010;汇编语言:通过大量的英文单词代表的计算机指...
    ILYBYLM阅读 643评论 0 1
  • 多态 * 子类对象可以存到父类的变量中 * 前提条件 * 子父类关系 * 方法重写 ...
    嗝__阅读 100评论 0 0
  • /** 变量与运算符 标识符:就是一个名称 例如类名:VariableDemo 特点(规则):首字母大写 关键字...
    尽人事听天命_6c6b阅读 162评论 0 0