API基础第一天
1.String:字符串类型2.常量池3.String常用方法
(1)int length()(2)String trim():(3)indexOf()(4)String substring():(5)char charAt(int index):(6)boolean startsWith(String prefix),boolean endWith(String prefix)(7)String toUpperCase()(8)static String valueOf(primitive data type x):(9)equalsIgnoreCase(String anotherString):
1.String:字符串类型java.lang.String使用的final修饰,不能被继承
String---------------java.lang包中
Math-----------------java.lang包中
不用import的,一般都在lang包中
class Aoo extends String{
//String类final修饰的,不能被继承
}
字符串底层封装了字符数组以及针对字符数组的操作方法
java字符串在内存中采用Unicode编码方式,任何一个字符都对应了两个字节的编码
字符串一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值
String str = "Hello";//内存中占用10个字节,可以直接赋值
char[] chs = {'H','e','l','l','o'};//Unicode编码
String str = new String("Hello");//不推荐这种赋值模式
String s1 = "123abc"; String s2 = "123abc"; System.out.println(s1 == s2);//true,s1与s2相同 s1 = s1+"!";//创建新对象并把地址赋值给s1 System.out.println(s1 == s2);//false,s1为新的对象的地址,与s2不同
String s1 = "123abc";
String s2 = "123"+"abc";
System.out.println(s1 == s2);//true,s1,s2公用常量池
String s3 = "123";
//当字符串拼接产生的内容与常量池某内容相同时,也不会重用常量池的对象
String s4 = s3 + "abc";//创建一个新的对象存储123abc
System.out.println(s1 == s4);//false
2.常量池
java对字符串有一个优化措施:字符串常量池(堆中)java推荐我们使用字面量/直接量的方式来创建字符串,并且会缓存所有以字面量形式创建的字符串对象到常量池中,当使用相同的字面量再次创建字符串时会重用对象以减少内存开销,避免内存中堆积大量内容相同的字符串对象在JAVA中只有字面量才会存储在常量池中
package apiday01;
public class StringDemo {
public static void main(String[] args){
String s1 = "123abc";//常量池没有,先创建该字符串对象并存入常量池
String s2 = "123abc";//常量池有,直接重用对象
System.out.println(s1 == s2);//引用类型==,比较的是地址是否相同
}
}
String S1 = new String("Hello");//S1装的是new String()对象的地址
String S2 = "Hello";//S2装的是字面量“Hello”的地址
System.out.println(S1 ==S2);//S1与S2的地址不同
注:字符串实际开发中比较相等的需求都是比较字符串的内容,因此要用到下面的方法。
3.String常用方法
(1)int length()
获取字符串的长度(字符个数)
package apiday01;
public class LengthDemo {
public static void main(String[] args) {
//int length():获取字符串的长度,字符个数
String str = "我爱java!";
int len = str.length();
System.out.println(len);//7
}
}
(2)String trim():
去除当前字符串两边的空白字符
package apiday01;
public class TrimDemo {
public static void main(String[] args) {
//String trim():去除两边空白字符
String str = " Hello World ";
System.out.println(str);
str = str.trim();
System.out.println(str);
}
}
Hello World
Hello World
(3)indexOf()
| 方法名 | 说明 |
|---|---|
| int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
| int indexOf(String str, int fromIndex) | 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
| int lastIndexOf(String str) | 检索最后一次出现给定字符串的位置 |
| int lastIndexOf(String str, int fromIndex) | 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索 |
package apiday01;
public class IndexOfDemo {
public static void main(String[] args) {
// 1.int indexOf(String str):
String str = "thinking in java";
int index = str.indexOf("in");
System.out.println(index);//2
index = str.indexOf("IN");
System.out.println(index);//-1,当前字符串不包含此内容
//2.int indexOf(String str, int fromIndex):
index = str.indexOf("in",4);
System.out.println(index); //5
// 3.int lastIndexOf(String str):
index = str.lastIndexOf("in");//找in最后一次出现的位置
System.out.println(index); //9
//4.int lastIndexOf(String str, int fromIndex)
index = str.lastIndexOf("in",8);
System.out.println(index);//5
}
}
(4)String substring():
| 方法名 | 说明 |
|---|---|
| String substring(int beginIndex) | 截取当前字符串中指定范围内的字符串------一直到最后 |
| String substring(int beginIndex, int endIndex) | 截取当前字符串中指定范围内的字符串-----包含start,不包含end |
package apiday01;
public class SubstringDemo {
public static void main(String[] args) {
String str = "www.tedu.cn";
String name = str.substring(4);
System.out.println(name);//tedu.cn
name = str.substring(4,8);
System.out.println(name);//tedu
}
}
例子:获取域名
public class SubstringDemo {
public static String getName(String line){
int index = line.indexOf(".")+1;
int index1 = line.indexOf(".",index);
return line.substring(index,index1);
}
public static void main(String[] args) {
String name = getName("www.tedu.com.cn");
System.out.println(name);//tedu
String str = getName("http://www.google.com");
System.out.println(str);//google
(5)char charAt(int index):
(返回当前字符串指定位置上的字符)返回指定索引处的 char 值。
package apiday01;
public class CharAtDemo {
public static void main(String[] args) {
String str = "thinking in java";
char c = str.charAt(5);
System.out.println(c); //i
}
}
(6)boolean startsWith(String prefix),boolean endWith(String prefix)
package apiday01;
public class StartsWithDemo {
public static void main(String[] args) {
String str = "thinking in java";
//判断str是否是以think开头的
boolean starts = str.startsWith("think");
System.out.println("statet" + starts);//true
//判断str是否是以java结尾的
boolean end = str.endsWith("java");
System.out.println("statet" + end);//true
//测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
boolean mid = str.startsWith("think",0);
System.out.println("statet"+mid);//true
mid = str.startsWith("think",1);
System.out.println("statet"+mid);//false
}
}
(7)String toUpperCase()
| 方法名 | 说明 |
|---|---|
| String toUpperCase() | 将当前字符串中的英文部分全部转换为大写 |
| String toLowerCase() | 将当前字符串中的英文部分全部转换为小写 |
package apiday01;
public class ToUpperCaseDemo {
public static void main(String[] args) {
//转大写
String str = "我爱java";
String upper = str.toUpperCase();
System.out.println(upper);//我爱JAVA
//转小写
String lower = str.toLowerCase();
System.out.println(lower);//我爱java
}
}
(8)static String valueOf(primitive data type x):
将其他数据类型转为为字符串类型。
package apiday01;
public class ValueOfDemo {
public static void main(String[] args) {
int a = 123;
//将int型变量a转换为String类型并赋值给str1
String str = String.valueOf(a);
System.out.println(str);
double s = 123.456;
//将double型变量转换为String类型并赋值给str1
String str1 = String.valueOf(s);
System.out.println(str1);
}
}
(9)equalsIgnoreCase(String anotherString):结论:互联网上真正使用的并不是unicode,真正传输的是UTF这种带长度信息的编码。拿到UTF数据后再把UTF编码转换为Unicode编码。
将此 String 与另一个 String 比较,不考虑大小写。
package apiday01;
import java.util.Locale;
import java.util.Random;
import java.util.Scanner;
public class Extend {
public static void main(String[] args) {
String str = "qwertyuiop123456789asdfghjkl987654321ZXCVBNMASDF";
Random random = new Random();
String code = "";
for (int i = 0; i < 4; i++) {
int index = random.nextInt(str.length());
char c = str.charAt(index);
code += c;
}
System.out.println(code);
System.out.println("请输入验证码:");
Scanner scanner = new Scanner(System.in);
String answer = scanner.nextLine();
if(code.equalsIgnoreCase(answer)){//用于比较字符串是否相同,忽视大小写
System.out.println("输入正确");
}
else {
System.out.println("输入错误");
}
}
}



