8.01 String简介

  1. String(字符串常量)概述

String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。

  1. 分析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 创建字符串对象

  1. 直接赋值方式创建对象
    直接赋值方式创建对象是在方法区的常量池

    String str="hello";//直接赋值的方式
    
  2. 通过构造方法创建字符串对象
    通过构造方法创建字符串对象是在堆内存

    String str=new String("hello");//实例化的方式
    
  3. 用字符数组创建一个字符串。

    char[] charArray = {'G','o', 'o' , 'd' , ' ' , ' D' , ' a' ,'y'};
    String message=new String(charArray);
    

8.03 String常用的方法

  1. String的判断功能

    boolean equals(Object obj):比较字符串的内容是否相同
    boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写
    boolean startsWith(String str): 判断字符串对象是否以指定的str开头
    boolean endsWith(String str): 判断字符串对象是否以指定的str结尾
    
  2. 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
    
  3. String的转换功能

    char[] toCharArray():把字符串转换为字符数组
    String toLowerCase():把字符串转换为小写字符串
    String toUpperCase():把字符串转换为大写字符串
    
  4. 其他常用方法

    去除字符串两端空格: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 经典例题

但凡对字符串的修改都是基于新的字符串对象的
只要该字符串 结果是一个新的字符串!!!
字符串一旦定义出来 则不可改变(对象 常量)

  1. 求最大子串
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 "";}

解题思路:

  1. 回文判断
    “上海自来水来自海上” “黄山落叶松叶落山黄” “山西运煤车煤运西山”
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;}

解题思路:

利用夹逼思想 分别定义标记当前头尾的变量,将其步长设置为相同,则比较头尾指针所致的元素都内容相同,则是回文字符串。

  1. 括号匹配
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类相关推荐

  1. java实用教程——常用实用类——String类(字符串类)

    JAVA把String类定义为final类(因此用户不能扩展String类,即String类不可以有子类) String对象可以用"+"进行并置运算 identityHashCod ...

  2. Java基础知识-------常用API(6)

    第1章Date 1.1Date类概述 类 Date 表示特定的瞬间,精确到毫秒. 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日 ...

  3. Java基础知识学习04-自定义类、ArrayList集合

    类与对象 类是一个模子,确定对象将会拥有的特征(属性)和行为(方法). 类的特征:类是对象的类型 具有相同属性和方法的一组对象的集合 类的组成:属性和方法 定义一个类:public class  类名 ...

  4. JAVA基础知识之Collections工具类

    排序操作 Collections提供以下方法对List进行排序操作 void reverse(List list):反转 void shuffle(List list),随机排序 void sort( ...

  5. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu;import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  6. java基础知识回顾之javaIO类总结

    java IO体系图 IO流的操作规律总结: 1,明确体系: 数据源:InputStream ,Reader 数据汇:OutputStream,Writer 2,明确数据:因为数据分两种:字节,字符. ...

  7. 【Java基础知识 1】Java入门级概述,让阿里架构师告诉你为什么要分库分表

    1998年12月8日,第二代Java平台的企业版J2EE发布. 1999年4月27日,HotSpot虚拟机发布. 2005年6月,在Java One大会上,Sun公司发布了Java SE 6.此时,J ...

  8. Java八股文一:java基础知识

    文章目录 一.Java 基础知识 1.Object 类相关方法 2.基本数据类型 3.序列化 4.String.StringBuffer.StringBuilder 5.重载与重写 6.final 7 ...

  9. 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 ...

最新文章

  1. 4、简单工厂模式,工厂方法模式,
  2. 昆仑mcp文件是什么版本_昆仑健康保2.0升级版怎么样?有哪些优缺点?
  3. CrazyDiskInfo硬盘检测工具 安装记录
  4. RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
  5. AC自动机:多模式串匹配实现敏感词过滤
  6. FPGA实现VGA显示(一)——————屏幕驱动及color_bar显示
  7. Java的API帮助文档
  8. python微信抢红包脚本_这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息...
  9. java工作流activity_activity 工作流学习(一)
  10. mysql数据库地址 名称_数据库地址和名称是什么?怎么知道自己地址和名称?
  11. 很多人知道外包的种种不好,但还是选择去外包,这是为什么呢?
  12. c语言电脑三点竖怎么输入,竖怎么打 【处理步骤】
  13. [Poi2012]Rendezvous
  14. ionic3 ion-select
  15. [转载] 服务器基础知识
  16. 计算机应用在航天,国产CPU的航天计算机应用
  17. 0503《软件工程》的简单小总结与展望
  18. Laravel 上传文件大小改为200M
  19. 【贪心】Bin Packing
  20. 免费支付接口申请平台对我们有什么好处

热门文章

  1. oracle触发器报错语法,Oracle 触发器
  2. 数据挖掘实战(2)——糖尿病数据集(回归问题)
  3. OTTO机器人之APP蓝牙控制
  4. 关于鬼谷子的数学推理题
  5. 阿里巴巴牵头发起对雅虎的250亿美元并购
  6. python3 urllib 内存泄露_【专家专栏】张昊 | 从urllib2的内存泄露看python的GC
  7. 新一代文件传输工具croc,croc的基本操作
  8. 转:不懂这些,你所谓的“复盘”都是无用功
  9. HDU1000A+B problem c++
  10. 谷歌地球如何下载使用高程数据