String类内容多但理解起来难度不大,这一节学习可以放轻松一些。
老规矩:先上思维导图,梳理知识点脉络。
一、字符串构造常用的三种方式:
(1)使用常量串构造 (2)直接newString对象 (3)使用字符数组进行构造
length()方法用于输出字符串长度。
(2)输出结果:
二、String类对象的比较:
基本数据类型比较的是对象的值,引用数据类型比较的是对象的地址(String类)。
(1):定义a、b、c三个整型变量,并分别赋值为10、20和10。然后创建了三个String类对象,分别赋值为hello、hello、world,之后使str4这个引用指向了str1所指向的String类对象,此时str4和sr1指向同一个内存地址,对这个对象的任何修改都会同时影响到str1和str4。
(2)输出结果:
【1】a和b都是基本数据类型,值不同,返回false。
【2】a和c都是基本数据类型,值相同,返回true。
【3】str1和str2都是引用数据类型,内容一致但不是同一个对象,地址不同,返回fasle。
【4】str2和str3都是引用数据类型,内容不一致也不是同一个对象,地址不同,返回false。
【5】str1和str4都是引用数据类型,内容一致且是同一个对象,地震相同,返回true。
三、字符串查找:
(1):给出了一个字符串s,并赋值。
【1】:charAt(3):返回3位置上字符。
【2】:indexOf('c'):返回c第一次出现的位置,没有返回-1。
【3】:indexOf('c',10):从10位置开始找c第一次出现的位置,没有返回-1。
【4】:indexOf("bbb"):返回bbb第一次出现的位置,没有返回-1。
【5】:indexOf("bbb",10):从10位置开始找bbb第一次出现的位置,没有返回-1。
【6】:lastIndexOf('c'):从后往前找,返回c第一次出现的位置,没有返回-1。
【7】:lastIndexOf('c',10):从10位置开始找c,从后往前找,没有返回-1。
【8】:lastIndexOf(“bbb”):从后往前找,返回bbb第一次出现的位置,没有返回-1。
【9】:lastIndexOf("bbb",10):从10位置开始找b,从后往前找,没有返回-1。
(2):输出结果:
四、数值和字符串转换:
(1):
【1】:数字转字符串:valueOf();
【2】:字符串转数字:Integer、Double等是java中的包装类型。
(2):输出结果:
五、大小写转换:
(1): 小写转大写:toUpperCase() 大写转小写:toLowerCase()
(2)输出结果:
六、字符串和数组相互转换
(1):
【1】、字符串转数组:通过for循环一个一个打印。
【2】、数组转字符串:通过new关键字实例化打印。
(2)输出结果:
七、格式化:
(1):方法format();
(2):输出结果:
八、字符串替换:
(1):
【1】:repalceAll("l","_");将所有“l”替换为“_”。
【2】:replaceFirst("l","_");将第一个“l”替换为“_”。
(2)输出结果:
九、字符串拆分:
(1):先定义了一个字符串str并赋值,其内容为“hello world hello bit”。
【1】:String[] spilt(" "): 有空格的位置全部拆分。
【2】:String[] spilt(" ",2):有空格的位置拆分,拆分为2组。
【3】:这是一个增强型for循环,s代表一个字符串型变量,result代表被遍历的数组,接着在每次循环打印字符串元素s。
(2):输出结果:
十、字符串截取:
(1):
【1】:subString(3):从3位置截取到结尾。
【2】:subString(0,3):截取0到3位置的内容,区间左闭右开,不包含3号下标。
(2):输出结果:
十一、去掉字符串中的左右空格,保留中间空格:
(1):trim()方法用于去掉字符串的左右空格,保留中间空格。
(2):输出结果:
十二、StringBulider和StringBuffer(用于String不可更改的特性,为了方便字符串的修改,StringBuilder的内容可以修改。)
(1):
【1】:创建应该StringBuilder类对象sb1,并赋值为hello。
【2】:让sb2引用指向sb1所指向的StringBuilder对象,此时sb1和sb2指向同一个对象。
【3】:append(' '):在字符串sb1后面加一个空格。
【4】:append("world"):在字符串sb1后面加一个world。
【5】:append(123):在字符串sb1后面加一个123。
【6】:打印sb1,结果为:hello world123。
【7】:sb1和sb2是同一个对象,打印true。
【8】:charAt(0):获取0位号上的字符:h。
【9】:length():获取字符串的有效长度:14。
【10】:capacity():获取底层数组的大小,这个大小通常会根据实际需求挑战。
【11】:setCharAt(0,'H'):将索引为0的字符设置为H。
【12】:insert(0,"Hello world!!!):将索引为0的位置插入字符串Hello world。
【13】:indexOf("Hello"):获取Hello第一次出现的位置:0。
【14】:lastIndexOf("hello"):获取hello最后一次出现的位置:没有hello,返回-1。
(2):
【1】:deleteCharAt(0):删除sb1第一个字符。
【2】:delete(0,5):删除下标为0-4的字符,不包括5,左开右闭。
【3】:从sb1截取下标0-4的字符,并赋值给str变量。
【4】:reverse():字符串逆转。
【5】:将sb1转换为String类型再赋值给变量str,然后打印str。
(3):输出结果:
十三、第一个只出现一次的字符:
(1):先创建了一个大小为256的整形数组,然后用一个for循环统计每个字符出现的次数。
s.charAt(i)返回字符串s索引为i的字符。 count[s.charAt(i)]++将对应的字符的计数+1,从而统计每个字符在字符串中出现的次数。
再有一个for循环,检查当前字符在计数数组count的计数是否为1,如果是,说明这个字符在字符串中只出现了1次,return i立即返回当前字符的索引位置,因为找到了第一个只出现1次的字符。
如果在整个循环中都没有找到只出现1次的字符,那么返回-1。
最后输入字符串“aaaabbsds”,打印输出结果为7。
(2):输出结果:
十四:求最后一个单词的长度:(后面代码比较难看懂)
(1):先自定义输入一行单词。
【1】:while(sc.hasNext()){...}:这是一个循环条件,只要Scanner对象sc还有下一个输入项,循环就会继续执行。hasNext()方法用于判断是否还有更多的输入进行读取。
【2】:第229行代码:nextLine方法,作用是读取输入源中的一整行文本。当调用这个方法时,程序会等待用户在控制台输入一行内容,并按下回车键,接着返回一个String类型的值,即用户输入的那一行文本内容。
【3】:第233行代码:s.lastIndexOf(' '):这个方法用于在字符串s中查找最后一个空格字符的索引位置。
s.lastIndexOf(' ')+1:找到最后一个空格后的位置索引,这是为了从这个位置开始截取子字符串。
s.substring(s.lastIndexOf(' ')+1,s.length()):从字符串s中,从最后一个空格后的位置开始,一直截取到字符串的末尾,得到一个子字符串。
.length():获取这个子字符串的长度,并将其赋值给变量len,然后打印len。
最后调用close方法结束程序。
(2):输出结果
十五、监测字符串是否回文(终极大boss): 正着和反着读都一样
isValidChar方法用来判断字符是否有效,isPalindrome方法用来判断字符串是否回文。
(1):定义了一个isValidChar方法,返回值类型为boolean,判断给定的字符是否为有效的字符。如果小写字符ch介意a和z或0到9之间,返回true,否则返回false。
(2):再定义了一个isPalindrome方法,返回值类型为boolean,参数类型为char,形参为ch,判断给定的字符串是否回文。首先调用toLowerCae()方法将字符串s全部转换为小写,然后分别初始化两个整形变量left和right,left指向字符串的开头,right指向字符串的结尾。
再给出了一个总循环,只要left指针小于right指针,就会持续进行。
再接着一个循环,从字符串的左侧开始,寻找第一个有效字符,如果不是有效字符,指针就向右移动一位。
再接着一个循环,从字符串的右侧开始,寻找第一个有效字符,如果不是有效字符,指针就向左移动一位。
(4):在main方法中,实例化了一个Bunch类bunch对象,然后给出了一个String型str变量,赋值为dad。然后使用isPalindrome判断str是否回文,并将结果存储在boolean型变量result中。
如果result为真,则打印“回文”,如果result为假,则打印“不是回文”。
最后用isValidChar方法判断字符‘y’是否为有效字符。
(5):输出结果:
dad正着读和反着读均一样,所以是回文。
y介于a和z之间,是有效字符,所以返回true。