java基础知识--(常用类)String类
8.01 String简介
- String(字符串常量)概述
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。
- 分析String源码
1)String的成员变量
从源码看出String底层使用一个字符数组来维护的
从成员变量可以知道String类的值是final类型的,不能被改变的,所以只要一个值改变就会生成一个新的String类型对象,存储String数据也不一定从数组的第0个元素开始的,而是从offset所指的元素开始。
2)String的构造方法
String() 初始化一个新创建的 String 对象,使其表示一个空字符序列。
String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
String(byte[] bytes, int offset, int length, Charset charset) 通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。
String(byte[] bytes, int offset, int length, String charsetName) 通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。
String(byte[] bytes, String charsetName) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
String(char[] value) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
String(char[] value, int offset, int count) 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
String(int[] codePoints, int offset, int count) 分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符。
String(String original) 初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
String(StringBuffer buffer) 分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
String(StringBuilder builder) 分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。
8.02 创建字符串对象
直接赋值方式创建对象
直接赋值方式创建对象是在方法区的常量池String str="hello";//直接赋值的方式
通过构造方法创建字符串对象
通过构造方法创建字符串对象是在堆内存String str=new String("hello");//实例化的方式
用字符数组创建一个字符串。
char[] charArray = {'G','o', 'o' , 'd' , ' ' , ' D' , ' a' ,'y'}; String message=new String(charArray);
8.03 String常用的方法
String的判断功能
boolean equals(Object obj):比较字符串的内容是否相同 boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写 boolean startsWith(String str): 判断字符串对象是否以指定的str开头 boolean endsWith(String str): 判断字符串对象是否以指定的str结尾
String类的获取功能
int length():获取字符串的长度,其实也就是字符个数char charAt(int index):获取指定索引处的字符int indexOf(String str):获取str在字符串对象中第一次出现的索引String substring(int start):从start开始截取字符串String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end
String的转换功能
char[] toCharArray():把字符串转换为字符数组 String toLowerCase():把字符串转换为小写字符串 String toUpperCase():把字符串转换为大写字符串
其他常用方法
去除字符串两端空格:String trim() 按照指定符号分割字符串:String[] split(String str)
8.04 String类常用函数
一)获取函数
1.获取字符串中字符的个数,即就是长度:int length();2.根据位置获取字符:char charAt(int index);3.根据字符获取位置:int indexOf(int ch); int lastIndexOf(int ch);4.获取部分子串:String subString(int beginIndex,int endIndex);
二)转换函数
1.将字符串变为字符串数组(切割):String[] split(String regex);2.将字符串变为字符数组:toCharArray();3.将字符串变为字节数组:getBytes();4.将字符串中的字母转换大小写:toUpperCase();toLowerCase();5.将字符串中的内容进行替换:String replace(char oldChar,char newChar);6.将字符串两端去空格:trim();7.将字符串进行连接:concat(String str);
三)判断函数
1.两个字符串内容是否相同:boolean equals(Object obj);2.字符串中是否包含指定字符串:boolean contains(String str);3.字符串是否已指定字符串开头,结尾:startWith() endWith();
四)比较函数
compareTo();比较字典顺序
五)其他
1.字符串与数组转换
字符串---->数组
(1)toCharArray 方法。
char[] chars = "Java".toCharArray();
(2)getChars(int srcBegin,int srcEnd,char[]dst,int dstBegin)将下标从 srcBegin 到 srcEnd的子串复制到字符数组 dst 中下标从 dstBegin 开始的位置。
数组---->字符串
(1)使用构造方法 Sting(Char[ ])
使用 String 构造方法由一个数组构造一个字符串:
String str = new String(new char[]{' 3' , 'a' , 'v', 'a'});
(2)value0f(char[])。例如,下面的语句
String str=String.valueOf(new char[]{' 3 ' , ' a ' , ' v ' , 'a'});
2.字符和数值---->字符串
(1)Double.parseDouble(str)
(2)Integer.parselnt(str)
(3)使用字符串的连接操作符来将字符或者数字转换为字符串。
(4)将一个字符串转换为一个 double 值或者一个 int 值,也可以另外一种将数字转换为字符串的方法是使用重载的静态 valueOf 方法。该方法可以用于将字符和数值转换成字符串.
例
为了将 double 值 5.44 转换成字符串,可以使用 String.value0f(5.44)。
返回值是 由 字 符'5', '.' ,'4', '4' 构成的字符串。
8.05 经典例题
但凡对字符串的修改都是基于新的字符串对象的
只要该字符串 结果是一个新的字符串!!!
字符串一旦定义出来 则不可改变(对象 常量)
- 求最大子串
public static String piPei() {String str1 = "abcd";String str2 = "efabca";for (int len = str1.length(); len >= 1; len--) {for (int start = 0, end = len - 1; end < str1.length(); start++, end++) {String temp = str1.substring(start, end); // 将分隔的子串获取到if (str2.contains(temp)) {return temp;}}}return "";}
解题思路:
- 回文判断
“上海自来水来自海上” “黄山落叶松叶落山黄” “山西运煤车煤运西山”
public static boolean huiwen(String s1) { // 夹逼思想int start = 0;int end = s1.length() - 1;boolean flag;while (start > end) {if (s1.charAt(start) == s1.charAt(end)) {start++;end--;} else {flag = false;break;}}return true;}
解题思路:
利用夹逼思想 分别定义标记当前头尾的变量,将其步长设置为相同,则比较头尾指针所致的元素都内容相同,则是回文字符串。
- 括号匹配
public static boolean parenthesisMatch() {// 括号匹配 栈实现String str = "()({[]})<><>{}";Stack<Character> stack = new Stack<Character>();for (int i = 0; i < str.length(); i++) {if (stack.isEmpty()) {stack.push(str.charAt(i));} else {if (stack.peek() - str.charAt(i) == -1 || stack.peek() - str.charAt(i) == -2) {stack.pop();} else {stack.push(str.charAt(i));}}}if (stack.isEmpty()) {return true;} else {return false;}}
解题思路:
利用栈的特性解题
6. 猜数游戏
import java.util.Scanner;public class Guess {Scanner scanner = new Scanner(System.in);String[] s = { "calcultor", "tough", "strategy", "implement", "current", "objective" }; //猜单词的单词库public static int count;Guess() {this.count = 0;}public void startGame() { //开始游戏String word = s[(int) (Math.random() * (s.length))]; //随机抽取到单词boolean[] status = new boolean[word.length()]; //定义boolean[]存放单词字母是否猜中while (true) {String secretWord = getSecretWord(word, status); //人输入的单词if (isGameOver(status)) { //游戏是否结束System.out.println("游戏结束" + secretWord);break;}System.out.print(" 请输入你的猜测" + secretWord); //游戏没有结束 提示用户输入所猜测的字母String im = scanner.nextLine();// 输入的是一个字符changStatus(word, status, im); //根据用户输入的字母,判断是否改变boolean[]某个位置的状态}System.out.println(count);}private String getSecretWord(String word, boolean[] status) { //字母猜中的显示字母,没猜中的用*代替String s = "";for (int i = 0; i < status.length; i++) {if (status[i]) {s += word.charAt(i);} else {s += "*";}}return s;}private void changStatus(String word, boolean[] status, String im) { //用户输入的字母是否在这个单词中,在就将这个位置的状态改变,令其字母显示出来boolean flag = false;for (int i = 0; i < word.length(); i++) {if ((word.charAt(i) + "").equals(im)) { // word.charAt(i)+"")字符转字符串flag = true;if (status[i]) {System.out.println("已存在,请重新输入");} else {status[i] = true;}}}if (flag == false) {count++;System.out.println("不存在");}}public boolean isGameOver(boolean[] status) { //判断游戏是否结束,Boolean[]每个元素的状态全为trueboolean flag = false;for (int i = 0; i < status.length; i++) {if (status[i] == false) {flag = true;}}return flag == true ? false : true;}
}
运行结果:
java基础知识--(常用类)String类相关推荐
- java实用教程——常用实用类——String类(字符串类)
JAVA把String类定义为final类(因此用户不能扩展String类,即String类不可以有子类) String对象可以用"+"进行并置运算 identityHashCod ...
- Java基础知识-------常用API(6)
第1章Date 1.1Date类概述 类 Date 表示特定的瞬间,精确到毫秒. 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日 ...
- Java基础知识学习04-自定义类、ArrayList集合
类与对象 类是一个模子,确定对象将会拥有的特征(属性)和行为(方法). 类的特征:类是对象的类型 具有相同属性和方法的一组对象的集合 类的组成:属性和方法 定义一个类:public class 类名 ...
- JAVA基础知识之Collections工具类
排序操作 Collections提供以下方法对List进行排序操作 void reverse(List list):反转 void shuffle(List list),随机排序 void sort( ...
- java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片
package com.lp.ecjtu;import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- java基础知识回顾之javaIO类总结
java IO体系图 IO流的操作规律总结: 1,明确体系: 数据源:InputStream ,Reader 数据汇:OutputStream,Writer 2,明确数据:因为数据分两种:字节,字符. ...
- 【Java基础知识 1】Java入门级概述,让阿里架构师告诉你为什么要分库分表
1998年12月8日,第二代Java平台的企业版J2EE发布. 1999年4月27日,HotSpot虚拟机发布. 2005年6月,在Java One大会上,Sun公司发布了Java SE 6.此时,J ...
- Java八股文一:java基础知识
文章目录 一.Java 基础知识 1.Object 类相关方法 2.基本数据类型 3.序列化 4.String.StringBuffer.StringBuilder 5.重载与重写 6.final 7 ...
- Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)
文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...
最新文章
- 4、简单工厂模式,工厂方法模式,
- 昆仑mcp文件是什么版本_昆仑健康保2.0升级版怎么样?有哪些优缺点?
- CrazyDiskInfo硬盘检测工具 安装记录
- RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
- AC自动机:多模式串匹配实现敏感词过滤
- FPGA实现VGA显示(一)——————屏幕驱动及color_bar显示
- Java的API帮助文档
- python微信抢红包脚本_这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息...
- java工作流activity_activity 工作流学习(一)
- mysql数据库地址 名称_数据库地址和名称是什么?怎么知道自己地址和名称?
- 很多人知道外包的种种不好,但还是选择去外包,这是为什么呢?
- c语言电脑三点竖怎么输入,竖怎么打
【处理步骤】
- [Poi2012]Rendezvous
- ionic3 ion-select
- [转载] 服务器基础知识
- 计算机应用在航天,国产CPU的航天计算机应用
- 0503《软件工程》的简单小总结与展望
- Laravel 上传文件大小改为200M
- 【贪心】Bin Packing
- 免费支付接口申请平台对我们有什么好处