第三阶段 JAVA常见对象的学习

第一章 常见对象——String类

(一) String 类的概述及其构造方法

(1) 概述

多个字符组成的一串数据,例如 “abc” 也可以看成是一个字符数组。

而通过 API我们又可以知道

A:字符串字面值“abc”也可以看成是一个字符串对象

B:字符串是常量,一旦被赋值,就不能改变

(2) 构造方法

//空构造
public String()//把字节数组转换成字符串
public String(byte[] bytes)//把字节数组的一部分转换成字符串
public String(byte[] bytes,int offset,int length)//把字符数组转换成字符串
public String(char[] value)//把字符数组的一部分转换成字符串
public String(char[] value,int offset,int count)//把字符串常量值转换成字符串
public String(String original)//下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
String s = "hello";

简单总结:String类的构造方法可以将 字节、字符数组、字符串常量(全部或者部分)转换为字符串类型

(3) 字符串方法

//返回此字符串的长度
public int length ();

(4)构造方法和lenght方法的小案例

//以前三个为例
public class StringDemo {public static void main(String[] args) {//public String():空构造String s1 = new String();System.out.println("s1:" + s1);System.out.println("s1.length:" + s1.length());System.out.println("-------------------------");//把字节数组转换成字符串:public String(byte[] bytes)byte[] bys = {97,98,99,100,101}; //abcdeString s2 = new String(bys);System.out.println("s2:" + s2);System.out.println("s2.length:" + s2.length());System.out.println("-------------------------");//把字节数组的一部分转换成字符串://public String(byte[] bytes,int offset,int length)String s3 = new String(bys,1,3);System.out.println("s3:" + s3);System.out.println("s3.length:" + s3.length());}
}
//运行结果:
s1:
s1.length:0
-------------------------
s2:abcde
s2.length:5
-------------------------
s3:bcd
s3.length:3

注:97,98,99,100,101 在ASCII码中代表abcde,不熟悉的朋友请自行查阅

(5) 经典例题(必看)

例题一:

/**  字符串特点:一旦被赋值,就不能改变*/
public class StringDemo {public static void main(String[] args) {String s = "Hello";s += "World";System.out.println("s:" + s);}
}//运行结果:
s:HelloWorld

解释:不能改变是指字符串对象本身不能改变,而不是指对象的引用不能改变,上述过程中,字符串本身的内容是没有任何变化的,而是分别创建了三块内存空间,(Hello) (World) (HelloWorld) s → Hello + World → HelloWorld 。String内容的改变实际上是通过字符串之间的拼接、断开进行的,如上例中拼接后s的引用也就指向了 拼接后的HelloWorld

总结:开发中,尽量少使用 + 进行字符串的拼接,尤其是循环内,我们更加推荐使用StringBuild、StringBuffer,此内容下一篇详细讲解。

例题二:

//两者的区别
String s = new String("hello");
String s = "hello";

前者创建了2个 (1个) 对象,后者创建了1个 (0个) 对象

下面解释中若存在情况满足则,分别为创建1个和0个对象

解释:

String s = new String("hello"); 创建实例过程

  1. 在堆中创建一个对象 “hello” (new出来的),让 s 引用这个对象

  2. 在字符串常量池中查找是否存在内容为 “hello”的字符串对象

​ A:若存在,将new出的对象与字符串常量池中已存在的相联系

​ B:若不存在,则在字符串常量池中创建一个内容为 "abc" 的字符串对象,并与堆中 的对相联系

String s = "hello"; 创建实例过程

  1. 在字符串常量中查找是否存在内容为"hello"的字符串对象

    ​ A:若存在,让s直接引用该对象

    ​ B:若不存在,则直接让s引用该对象

总结:前者new一个对象,“hello”隐式创建一个对象,后者只有“hello”创建一个对象,在开发中,尽量使用 String s = "hello" 的方式,效率比另一种高。

例题三:

public class StringDemo {public static void main(String[] args) {String s1 = new String("hello");String s2 = new String("hello");System.out.println(s1 == s2);//falseSystem.out.println(s1.equals(s2));//trueString s3 = new String("hello");String s4 = "hello";System.out.println(s3 == s4);//falseSystem.out.println(s3.equals(s4));//trueString s5 = "hello";String s6 = "hello";System.out.println(s5 == s6);//trueSystem.out.println(s5.equals(s6));//true}
}
//运行结果
false
true
false
true
true
true

解释: == 比较地址值是否相同、String中的equals()比较字符串内容是否一致

例题四:

public class StringDemo2 {public static void main(String[] args) {String s1 = "Hello";String s2 = "World";String s3 = "HelloWorld";System.out.println(s3 == s1 + s2);System.out.println(s3.equals(s1 + s2));System.out.println(s3 == "Hello" + "World"); //重点System.out.println(s3.equals("Hello" + "World"));}
}
//运行结果
false
true
true
true

总结:

  1. 字符串中如果是变量相加,先开空间,再拼接
  2. 字符串中如果是字符串相加,是先加,然后在常量池中找,如果有就直接返回否则就创建

(二) String类的功能

(1) 判断功能

//比较字符串的内容是否相同,区分大小写
boolean equals(Object obj)//比较字符串的内容是否相同,不区分大小写
boolean equalsIgnoreCase(String str)//判断大字符串中是否包含小字符串
boolean contains(String str)//判断某个字符串是否以某个指定的字符串开头
boolean startsWith(String str)//判断某个字符串是否以某个指定的字符串结尾
boolean endsWith(String str)//判断字符串是否为空
boolean isEmpty()注意:
String s = “ ”;   // 字符串内容为空
String s = null;  // 字符串对象为空

简单模拟登录案例 (String版)

import java.util.Scanner;/**  模拟登陆案例,给三次机会,并且提示剩余次数*      A:定义用户名和密码(已经存在的)*      B:键盘录入用户名和密码*      C:比较用户名和密码*      D:给三次机会,用循环改进*/public class StringDemo {public static void main(String[] args) {for (int x = 0; x < 3; x++) {String username = "admin";String password = "admin888";Scanner sc = new Scanner(System.in);System.out.println("请输入用户名");String name = sc.nextLine();System.out.println("请输入密码");String psw = sc.nextLine();if (name.equals(username) && psw.equals(password)) {System.out.println("登录成功");} else {if ((2 - x) == 0) {System.out.println("你的账号已经被锁定,请与管理员联系");} else {System.out.println("登录失败,你还有" + (2 - x) + "次机会");}}}}
}

(2) 获取功能

//获取字符串的长度
int length()//获取指定索引的字符
char charAt(int index)//返回指定字符在此字符串中第一次出现的索引
int indexOf(int ch)
//为什么这里是int而不是char?
//原因是:‘a’和‘97’其实都能代表‘a’ int方便//返回指定字符串在此字符串中第一次出现的索引
int indexOf(String str)//返回指定字符在此字符串中从指定位置后第一次出现的索引
int indexOf(int ch,int fromIndex)//返回指定字符串在此字符串中从指定位置后第一次出现的索引
int indexOf(String str,int fromIndex)//从指定位置开始截取字符串,默认到末尾
String substring(int start)//从指定位置开始指定位置结束截取字符串
String substring(int start,int end)

字符串中数据统计案例

import java.util.Scanner;/**  案例:统计一个字符串中大写字母字符,小写字母字符,数字字符出现 * 的次数*/public class StringDemo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入需要统计的数据");String s = sc.nextLine();int numberCount = 0;int smallCout = 0;int bigCout = 0;for (int x = 0; x < s.length(); x++) {char ch = s.charAt(x);if (ch >= 'a' && ch <= 'z') {smallCout++;} else if (ch >= 'A' && ch <= 'a') {bigCout++;} else if (ch >= '0' && ch <= '9') {numberCount++;}}System.out.println("大写字母:" + bigCout + "个");System.out.println("小写字母:" + smallCout + "个");System.out.println("数字:" + numberCount + "个");}
}
//运行结果
请输入需要统计的数据
HelloWorld520
大写字母:2个
小写字母:8个
数字:3个

(3) 转换功能

//把字符串转换为字节数组
byte[] getBytes()//把字符串转换成字符数组
char[] toCharArray()//把字符数组转换成字符串
static String valueOf(char[] chs)//把int类型的数据转换成字符串
static String valueOf(int i)
//注意:String类的valueOf方法可以把任何类型的数据转换成字符串!//把字符串转换成小写
String toLowerCase()//把字符串转换成大写
String toUpperCase()//把字符串拼接
String concat(String str)

(4) 其他功能

//替换功能
String replace(char old,char new)
String replace(String old,String new)//去除字符串两端空格
String trim()//按字典比较功能
int compareTo(String str)
int compareToIgnoreCase(String str) 

逆序输出字符串案例

/**  键盘输入 "abc"*  输出结果 "cba"*/import java.util.Scanner;public class StringDemo2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入:");String line = sc.nextLine();char[] chs = line.toCharArray();String result = "";for (int x = chs.length - 1; x >= 0; x--) {result += chs[x];}      System.out.println("reusult:" + result);}
}
//运行结果
请输入:
abc
reusult:cba

大串中查询小串案例

import java.util.Scanner;public class StringDemo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入被统计的数据");String maxString = sc.nextLine();System.out.println("请输入统计关键词");String minString = sc.nextLine();int count = getCount(maxString, minString);System.out.println("count:" + count);}public static int getCount(String maxString, String minString) {//定义一个统计变量,初始化为0int count = 0;//先在大串中查找小串第一次出现的位置int index = maxString.indexOf(minString);//索引不是-1,说明存在,统计变量++while (index != -1) {count++;//把刚才的索引 + 小串的长度作为开始位置截取上一次的大串//返回一个新的字符串,并把该字符串的值重新赋给大串int startIndex = index + minString.length();maxString = maxString.substring(startIndex);index = maxString.indexOf(minString);}return count;}
}//运行结果
请输入被统计的数据
Hello520World520
请输入统计关键词
520
count:2

结尾:

如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^

如果能帮到你的话,那就来关注我吧!(系列文章均会在公众号第一时间更新)

在这里的我们素不相识,却都在为了自己的梦而努力 ❤

一个坚持推送原创Java技术的公众号:理想二旬不止

转载于:https://www.cnblogs.com/ideal-20/p/11050193.html

String类基础的那些事!相关推荐

  1. [Java]String类基础知识与常用方法总结

    这篇文章用于记录个人学习过程中Java中String类的一些基础知识和方法.主要记录了String类的特性.常用方法,以及和基本数据类型.包装类互转方面的内容. 源码部分 我们先简易看下Java13中 ...

  2. String类学习后练手的基础小练习

    String类基础操作练习 练习一 已知正确的用户名和密码,请用程序实现模拟用户登录,总共给三次机会,登陆之后给出相应提示. public class StringTest1 {public stat ...

  3. JAVAAPI之STRING类和STRINGBUFER类

    1.Stirng类的初始化 范例:String name="梁东振"; 2.String类的常见操作 -----------字符串的基本操作------------------ 范 ...

  4. Java常用类之String类知识清单,简单易理解

    String类基础知识 1.String类表示字符串,理解为不可变的字符序列 2.String类声明为final,不可被继承 3.String类实现了Serializable接口:表示字符串是支持序列 ...

  5. Java基础:String类

    相关阅读 Java基础:String类 Java字符串格式化 Java基础:正则表达式 1. 概述 字符串是由多个字符组成的一串数据(字符序列),字符串可以看成是字符数组. 在实际开发中,字符串的操作 ...

  6. java的知识点15——String基础、String类和常量池、String类常用的方法、字符串相等的判断、组合模式

    String基础 1. String类又称作不可变字符序列. 2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类. 3. Java字符串就是Unicode ...

  7. java实现linkstring,【JAVA SE基础篇】32.String类入门

    [JAVA SE基础篇]32.String类入门 1.字符串 1.String类又称作不可变字符序列 2.String位于java.lang包中,java程序默认导入java.lang包下所有的类 3 ...

  8. abstract类_012 JAVA 抽象类、接口、String类的基础了解

    1.抽象方法和抽象类 抽象方法:使用abstract修饰的方法,没有方法体,只有声明.抽象方法可以当做是一种规范,让子类必须实现. 注意: 1.抽象方法没有方法体,只能以分号结尾 2.抽象方法只能声明 ...

  9. java number string_java基础系列(一):Number,Character和String类及操作

    这篇文章总结了Java中最基础的类以及常用的方法,主要有:Number,Character,String. 1.Number类 在实际开发的过程中,常常会用到需要使用对象而不是内置的数据类型的情形.所 ...

  10. Java基础篇(02):特殊的String类,和相关扩展API

    本文源码:GitHub·点这里 || GitEE·点这里 一.String类简介 1.基础简介 字符串是一个特殊的数据类型,属于引用类型.String类在Java中使用关键字final修饰,所以这个类 ...

最新文章

  1. Kotlin 简化Fragment使用的扩展方法
  2. Hungtingdon road surgery
  3. java构造块_java中的静态代码块、构造代码块、构造方法详解
  4. 让你又爱又恨的推荐系统--程序猿篇
  5. 我在项目中用到的vue FullCalendar的内置函数以及配置项
  6. JDK 11 将引入低延迟 GC,大幅度缩短 GC 暂停时长
  7. Numpy 之 where理解
  8. [转]wince中解析reg和bib文件的不同之处
  9. sqlplus 主键 设置_浅谈MyBatis-Plus学习之Oracle的主键Sequence设置
  10. (1)非对称加密——RSA——史上最通俗的小白可看懂!
  11. [TCO2013]TrickyInequality
  12. IEEE access参考文献的添加
  13. 寻找可接入正版音乐曲库的音乐API?来了解HIFIVE音乐开放平台!
  14. MICROSOFT REPORTVIEWER(微软报表)项目中的应用
  15. PotPlayer获取获取播放文件的实时码率信息
  16. 高清电子警察监控系统方案
  17. 完美破解PS插件Parker
  18. 京东面试Java后台--2018年9月16号(星期日)
  19. uniapp 集成腾讯云超级播放器问题
  20. 自学JQuery Mobile的几个例子

热门文章

  1. top刷新间隔_还在用top监控CPU?我们都在用glances
  2. docker容器的常用命令以及访问tomcat报404的解决方法(二)
  3. 【渝粤教育】国家开放大学2018年春季 7385-21T公共关系学(本) 参考试题
  4. 【渝粤教育】国家开放大学2018年春季 0284-21T外国文学 参考试题
  5. 对抗搜索之【最大最小搜索】【Alpha-Beta剪枝搜索】
  6. ubuntu16.04中 启动 Error starting userland proxy: listen tcp 0.0.0.0:5900: bind: address already in use
  7. PyQt 的程序框架——面向对象版本
  8. 2018年湘潭大学程序设计竞赛 F maze
  9. CentOS7.5下KVM虚拟机安装
  10. python mysql connector