目录
3.4StringBuilder和String之间的相互转换
1.API
- API (Applic ation ProgrammingInterface):应用程序编程接口
- Java API:指的就是JDK中提供的各种功能的Java类
- 这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
1.1输入案例
需求:按照帮助文档的使用步骤学习Scanner类的使用,并实现键盘录入一个字符串,最后输出在控制台。
1.阅读API:
2.编写案例:
ScannerDemo.java
package com.ydh_01;
import java.util.Scanner;
/*
Scanner:
用于获取键盘录入的数据。(基本数据类型,字符串数据)
public String nextLine():
获取键盘录入字符串数据
*/
public class ScannerDemo {
public static void main(String[] args) {
//创建对象
Scanner in = new Scanner(System.in);
//接受数据
System.out.println("请输入一个字符串数据:");
//Ctrl+Alt+V
String line = in.nextLine();
//输出结果
System.out.println("你输入的数据是:"+line);
}
}
2.String
2.1字符串概述
String类在java.lang包下,所以使用的时候不需要导包。
String类代表字符串,Java 程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是String类的对象。
2.2字符串的特点
- 字符串不可变,它们的值在创建后不能被更改。
- 虽然String的值是不可变的,但是它们可以被共享。
- 字符串效果上相当于字符数组( char[]),但是底层原理是字节数组( byte[] )。(JDK8及以前是字符数组,JDK9及以后是字节数组)
2.3String构造方法
推荐使用直接赋值的方式得到字符串对象。
package com.ydh_02;
public class StringDemo01 {
public static void main(String[] args) {
//public String():创建一个空白字符串对象,不含任何内容
String s1=new String();
System.out.println("s1:"+s1);//s1:
//public String(char[] chs):根据字符数组内容,来创建字符串对象
char[] chs={'a','b','c'};
String s2=new String(chs);
System.out.println("s2:"+s2);//s2:abc
//public String(byte[] bys):根据字节数组内容,来创建字符串对象
byte[] bys={97,98,99};
String s3 = new String(bys);
System.out.println("s3:"+s3);//s3:abc
//public s="abc";直接赋值的方式创建字符串对象,内容就是abc(推荐使用)
String s4="abc";
System.out.println("s4:"+s4);//s4:abc
}
}
2.4String对象的特点
2.5字符串的比较
package com.ydh_02;
public class StringDemo02 {
public static void main(String[] args) {
//构造方法的方式得到对象
char[] chs={'a','b','c'};
String s1=new String(chs);
String s2 = new String(chs);
//直接赋值的方式得到对象
String s3="abc";
String s4="abc";
//比较字符串地址是否相同
System.out.println(s1==s2);//false
System.out.println(s1==s3);//false
System.out.println(s3==s4);//true
System.out.println("-------");
//比较字符串内容是否相同
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//true
System.out.println(s3.equals(s4));//true
}
}
2.6案例:用户登录
package com.ydh_03;
import java.util.Scanner;
public class StringTest01 {
public static void main(String[] args) {
String username="ydh";
String password="123456";
Scanner in = new Scanner(System.in);
for(int i=0;i<3;i++){
System.out.println("请输入用户名:");
String name = in.nextLine();
System.out.println("请输入密码:");
String pwd = in.nextLine();
if(username.equals(name)&&password.equals(pwd)){//登录成功
System.out.println("登录成功!");
break;
}else{//登录失败
if (2-i==0){
System.out.println("你的账户被锁定,请与管理员联系!");
}else{
System.out.println("登录失败,你还有"+(2-i)+"次机会!");
}
}
}
}
}
2.7案例:字符串的遍历
package com.ydh_03;
/*
public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
public int length():返回此字符串的长度
* */
import java.util.Scanner;
public class StringTest02 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = in.nextLine();
for (int i=0;i<s.length();i++){
System.out.println(s.charAt(i));
}
}
}
2.8案例:统计字符次数
package com.ydh_03;
import java.util.Scanner;
public class StringTest03 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s=in.nextLine();
//三个统计变量,初始值都为0
int bigCount=0;
int smallCount=0;
int numberCount=0;
//遍历字符串,得到每一个字符
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
//判断每个字符属于哪种类型,然后对应类型的统计变量+1
if (ch>='A'&&ch<='Z'){
bigCount++;
}else if (ch>='a'&&ch<='z'){
smallCount++;
}else if(ch>='0'&&ch<='9')
numberCount++;
}
System.out.println("大写字母:"+bigCount+"个");
System.out.println("小写字母:"+smallCount+"个");
System.out.println("数字:"+numberCount+"个");
}
}
2.9案例:字符串拼接
package com.ydh_03;
public class StringTest04 {
public static void main(String[] args) {
int[] arr={1,2,3};
String s=arrToString(arr);
System.out.println("s="+s);//s=[1,2,3]
}
//定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回
public static String arrToString(int[] arr){
//在方法中遍历数组,按照要求进行拼接
String s="";
s+='[';
for(int i=0;i<arr.length;i++){
s+=arr[i];
if (i==arr.length-1){
s+=']';
}else{
s+=',';
}
}
return s;
}
}
2.10案例:字符串反转
package com.ydh_03;
import java.util.Scanner;
public class StringTest05 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = in.nextLine();
System.out.println(reverse(s));
}
//定义一个方法,实现字符串反转
public static String reverse(String s){
String ss="";
//倒着遍历,字符拼接
for(int i=s.length()-1;i>=0;i--){
ss+=s.charAt(i);
}
return ss;
}
}
2.11通过帮助文档查看String中的方法
这是常用的String方法
其他的String方法就需要我们自行查阅帮组文档。
String s=null与String s=""的区别
- null代表声明了一个空对象,是常量,根本就不是一个字符串。
- ""代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。
- null不可以调用方法,""可以调用方法。
3.StringBuilder
3.1StringBuilder概述
StringBuilder是一个可变的字符串类, 我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的。
String和StringBuilder的区别:
- String: 内容是不可变的
- StringBuilder: 内容是可变的
3.2StringBuilder构造方法
package com.ydh_01;
public class StringBuilderDemo01 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder();//创建空白可变字符串对象
System.out.println("sb:"+sb);//sb:
System.out.println("sb.length():"+sb.length());//sb.length():0
StringBuilder sb2 = new StringBuilder("hello");//创建非空白可变字符串对象
System.out.println("sb2:"+sb2);//sb2:hello
System.out.println("sb2.length():"+sb2.length());//sb2.length():5
}
}
3.3StringBuilder添加和反转方法
package com.ydh_02;
public class StringBuilderDemo01 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder();
// StringBuilder sb2=sb.append("hello");
// System.out.println("sb:"+sb);//sb:hello
// System.out.println("sb2:"+sb2);//sb2:hello
// System.out.println(sb==sb2);//true
// sb.append("hello");
// sb.append("java");
// sb.append(100);
//链式编程
sb.append("hello").append("java").append("100");
System.out.println("sb:"+sb);//sb:hellojava100
sb.reverse();
System.out.println("sb:"+sb);//sb:001avajolleh
}
}
3.4StringBuilder和String之间的相互转换
package com.ydh_02;
public class StringBuilderDemo02 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder();
sb.append("hello");
// String s=sb;//错误
String s=sb.toString();//StringBuilder转换为String
System.out.println(s);//hello
String s2="world";
// StringBuilder sb2=s2;//错误
StringBuilder sb2=new StringBuilder(s2);//String转换为StringBuilder
System.out.println(sb2);//world
}
}
3.5案例:字符串拼接升级版
package com.ydh_03;
public class StringBuilderTest01 {
public static void main(String[] args) {
int[] arr={1,2,3};
String s=arrToString(arr);
System.out.println(s);//s=[1,2,3]
}
public static String arrToString(int []arr){
StringBuilder sb=new StringBuilder();
sb.append("[");
for(int i=0;i<arr.length;i++){
sb.append(arr[i]);
if(i==arr.length-1){
sb.append("]");
}else{
sb.append(",");
}
}
String s=sb.toString();//StringBuilder转换为String
return s;
}
}
3.6案例:字符串反转升级版
package com.ydh_03;
import java.util.Scanner;
public class StringBuilderTest02 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line=in.nextLine();
String s=myreverse(line);
System.out.println("s="+s);
}
//在方法中用StringBuilder实现字符串的反转,并把结果转换成String返回
public static String myreverse(String s){
// String--StringBuilder--调用reverse方法--String
// StringBuilder sb=new StringBuilder(s);
// sb.reverse();
// String ss=sb.toString();
// return ss;
return new StringBuilder(s).reverse().toString();
}
}
3.7通过帮助文档查看StringBuilder中的方法
这是常用的StringBuilder方法
其他的StringBuilder方法就需要我们自行查阅帮组文档。