第三阶段 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}; //abcde
String 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);//false
System.out.println(s1.equals(s2));//true String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4);//false
System.out.println(s3.equals(s4));//true String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6);//true
System.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) {
//定义一个统计变量,初始化为0
int 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技术的公众号:理想二旬不止

String类基础的那些事!的更多相关文章

  1. String类基础知识

    1.String类的构造方法 (1)String(String original)  //把字符串数据封装成字符串对象 (2)String(char[] c)   //把字符数组的数据封装成字符串对象 ...

  2. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

  3. 《java入门第一季》之类(String类常见方法小叙)

    String类下面的构造方法和一些常见的方法: /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,可以知道 * A:字符串字面值"abc&quo ...

  4. Java基础——数组应用之字符串String类

    字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...

  5. 【java 基础 9】原来我从没有了解过String类

    导读:这两天没有做项目,然后就想着把之前在项目中用到过的东西总结总结.记得之前做今日开讲项目时,在比较学生学号的时候,我最开始用的是"==",但是,实践证明,这个玩意儿吧,总是很奇 ...

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

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

  7. JavaSE基础知识---常用对象API之String类

    一.String类 Java中用String类对字符串进行了对象的封装,这样的好处在于对象封装后可以定义N多属性和行为,就可以对字符串这种常见的数据进行方便的操作. 格式:(1)String s1 = ...

  8. Java基础系列2:深入理解String类

    Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...

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

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

随机推荐

  1. Oracle 数据库SQL审计

    在我们日常的工作中,一些安全性的要求高的数据库需要增加审计操作,哪个用户什么时间做了什么操作. 1.打开数据库的审计 alter system set audit_sys_operations=TRU ...

  2. Codevs 1743 反转卡片(splay)

    1743 反转卡片 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description [dzy493941464|yywyzdzr原创] 小A将N ...

  3. 【luoguP1840】 Color the Axis_NOI导刊2011提高(05)

    题目描述 在一条数轴上有N个点,分别是1—N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. 输入格式 输入一行为N ...

  4. vue怎么引入echats并使用 (柱状图 字符云)

    安装 npm install echarts --save 下面看一下如何简单的使用: 在main.js中引入(全局引入) // 引入echarts import echarts from 'echa ...

  5. 使用Ajax向SpringMVC传递Json数据

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.保证SpringMVC配置成功了. 2.在pom.xml中追加Jackson相关的依赖 <dependency> <gro ...

  6. Python3使用openpyxl读写Excel文件

    Python中常用的操作Excel的三方包有xlrd,xlwt和openpyxl等,xlrd支持读取.xls和.xlsx格式的Excel文件,只支持读取,不支持写入.xlwt只支持写入.xls格式的文 ...

  7. 百度翻译api初使用(很久没写python了,写几行玩玩)

    调用free api做做简易的翻译 这个是百度翻译api文档 http://api.fanyi.baidu.com/api/trans/product/apidoc 照着百度api给的文档向web服务 ...

  8. Ubuntu 在VirtualBox里无法联网【已解决】

    1. 在virtualBox中设置网络:设置->网络->将连接方式选定为“网络地址转换(NAT)” 点确定 2.进入Ubuntu系统中:系统设置->网络, 在弹出的对话框中选择:有线 ...

  9. 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?

    曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式.什 ...

  10. AcFun 的视频架构演化实践——阅读心得

    视频的核心技术栈 AcFun 弹幕视频网(acfun.tv)是中国最早上线的弹幕视频网站,也是最具影响力的弹幕视频平台.“AcFun”原取意于“AnimeComic Fun”.自2007年6月6日成立 ...