API概述
什么是API
API(Application Programming lnterface)意思为:应用程序接口
就是已经写好的的程序或功能,程序要需要时可以直接调用,无需再次编写。
为什么需要API
编程界一句名言:”没有必要重复的发明轮子”
意思就是别人已经设计好的工具可以直接使用,我们日常生活中也会使用很多工具我们需要时拿过来用就好了,不用知道这个工具的运作原理
Java的设计者已经将很多常用的功能写好,形成了APl(或称类库)
Java程序要需要这些功能时,直接调用APl即可,方便的软件开发,降低了开发难度
常用API结构
![](https://img.haomeiwen.com/i24582526/d93ac2b5df2873c2.png)
String 字符串
什么是字符串
java中String就是字符串类型
我们使用过类似的String s="abc";的内容其中”abc”就是一个字符串的对象
为什么需要字符串
字符就是文字,是人类沟通,记录信息不可或缺的媒体java中的char只能保存1个字符,保存一段文字太麻烦了java中使用字符串可以一个对象保存多个文字
字符串概述
String类被final修饰String类特殊的赋值方法String本质为char数组String是不可变对象
字符串使用Unicode编码保存
字符串常量池
字符串是不变对象,即:对象一旦创建内容不可改变,若改变一定创建新对象
package day01;
public class StringDemo1 {
public static void main(String[] args) {
//java推荐使用字面量形式创建字符串对象
String s1 = "123abc";
//字面量对象一旦发现曾经创建过就重用
String s2 = "123abc";
//s2重用s1创建的字符串对象
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
//new操作一定创建新对象
String s3 = new String("123abc");
System.out.println("s3:"+s3);
System.out.println(s1==s3);//false
System.out.println(s1.equals(s3));//true
/*
* java编译器有一个优化措施,即:
* 当一个计算表达式参与运算的值都是字面量
* 那么直接计算,并将结果编译到.class文件中
* 所以下面的代码在class文件中的样子为:
* String s4 = "123abc";
*/
String s4 = "123" + "abc";
System.out.println(s1==s4);//true
String s5 = "123";
String s6 = s5 + "abc";//一方是变量,编译时就不计算
System.out.println(s1==s6);//false
}
}
字符串常用API
获取字符串长度
int length()
查找给定字符串在当前字符串中的位置,若当前字符串不包含给定内容则返回值为-1
package day01;
/**
* int length()
* 返回当前字符串的长度,即:字符个数
* 无论中英文,每个字符1个长度
* @author adminitartor
*
*/
public class String_length {
public static void main(String[] args) {
String str = "你好java";
int len = str.length();
System.out.println("len:"+len);
}
}
获得某些字符在字符串中的位置
int indexOf(String str)
查找给定字符串在当前字符串中的位置,若当前字符串不包含给定内容则返回值为-1
package day01;
/**
* int indexOf(String str)
* 查找给定字符串在当前字符串中的位置
* @author adminitartor
*
*/
public class String_indexOf {
public static void main(String[] args) {
// 0123456789012345
String str = "thinking in java";
/*
* 找第一次出现"in"的位置
*/
int index = str.indexOf("in");
System.out.println(index);
/*
* 从下标3处开始查找第一次出现"in"的位置
*/
index = str.indexOf("in", 3);
System.out.println(index);
//查找最后一次出现"in"的位置
index = str.lastIndexOf("in");
System.out.println(index);
}
}
从字符串中截取指定的内容
String substring(int start,int end)
截取当前字符串指定范围内的子字符串两个参数分别表示开始的下标和结束的下标,需要注意:Java APl有一个特点,通常用两个数字表示范围时都是含头不含尾的。
package day01;
/**
* String substring(int start,int end)
* 截取当前在字符串指定范围内的字符串内容
* @author adminitartor
*
*/
public class String_substring {
public static void main(String[] args) {
// 01234567890123
String str = "www.oracle.com";
/*
* 通常用两个数字表示范围时,都是含头不含尾的
*/
String sub = str.substring(4, 10);
System.out.println(sub);
sub = str.substring(4);
System.out.println(sub);
/*
* http://www.oracle.com
* www.oracle.com
*/
String host = "http://www.oracle.com.cn";
//截取域名?
int start = host.indexOf(".")+1;
int end = host.indexOf(".",start);
sub = host.substring(start,end);
System.out.println(sub);
}
}
去掉字符串左右空格
String trim()
去除当前字符串两边的空白字符
package day01;
/**
* String trim()
* 去除一个字符串两边的空白字符
* @author adminitartor
*
*/
public class String_trim {
public static void main(String[] args) {
String str = " hello ";
String s = str.trim();
System.out.println(str);
System.out.println(s);
}
}
根据位置获取字符
char charAt(int index)
获取当前字符串中指定位置的字符
package day01;
/**
* char charAt(int index)
* 返回当前字符串中指定下标处对应的字符
* @author adminitartor
*
*/
public class String_charAt {
public static void main(String[] args) {
// 0123456789012345
String str = "thinking in java";
char c = str.charAt(10);
System.out.println(c);
/*
* 查看一个字符串是否为"回文"
* 柳庭风静人眠昼,昼眠人静风庭柳
*/
String s = "柳庭风静人眠昼,昼眠人静风庭柳";
for(int i=0;i<s.length()/2;i++){
if(s.charAt(i)!=s.charAt(s.length()-1-i)){
System.out.println("不是回文");
return;
}
}
System.out.println("是回文");
}
}
判断字符串首尾内容
boolean startsWith(String str)
boolean endsWith(String str)
判断当前字符串是否是以给定的字符串开始或结尾的。
package day01;
/**
* boolean startsWith(String str)
* boolean endsWith(String str)
* 判断一个字符串是否是以给定字符串开始或结尾的
* @author adminitartor
*
*/
public class String_startsWith_endsWith {
public static void main(String[] args) {
String str = "thinking in java";
boolean starts = str.startsWith("thin");
System.out.println("starts:"+starts);
boolean ends = str.endsWith("ava");
System.out.println("ends:"+ends);
}
}
转换大小写
String toUpperCase()
String toLowerCase()
将当前字符串中的英文部分转换为全大写或全小写
package day01;
/**
* boolean toUpperCase()
* boolean toLowerCase()
* 将当前字符串中的英文部分转换为全大写或全小写
* @author adminitartor
*
*/
public class String_toUpperCase_toLowerCase {
public static void main(String[] args) {
String str = "你好Java";
String upper = str.toUpperCase();
System.out.println(upper);
String lower = str.toLowerCase();
System.out.println(lower);
}
}
基本数据类型转换成字符串
String提供了一组重载的静态方法:valueOf作用是将java中其他类型转换为字符串
package day01;
/**
* java提供了多个重载的静态方法valueOf
* 作用是将其他类型转换为字符串
* @author adminitartor
*
*/
public class String_valueOf {
public static void main(String[] args) {
int a = 123;
String str = String.valueOf(a);// "123"
System.out.println(str+4);
double d = 123.123;
String str1 = String.valueOf(d);
System.out.println(str1+4);//"123.1234"
str = a + "";
}
}
StringBuilder可变长度字符串
什么是可变长度字符串
StringBuilder类在java.lang包下,该类维护一个可变长度的字符串它本身并不是字符串,而是提供维护字符串功能的API
为什么需要StringBuilder
因为String类型对象不可变,在频繁修改时性能低下,内存开销大所以在频繁修改字符串时,需要避免使用String类型
package day01;
/**
* 频繁修改字符串带来的性能问题
* @author adminitartor
*
*/
public class StringDemo2 {
public static void main(String[] args) {
String str = "a";
for(int i=0;i<10000000;i++){
str+=str;
}
}
}
上面代码运行会非常的慢,极端情况下会发生异常。
![](https://img.haomeiwen.com/i24582526/ca72cd5d58459478.png)
原因就是内存溢出了。
下面我们使用StringBuilder来解决这个问题。
package day01;
public class StringDemo3 {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("a");
for(int i=0;i<10000000;i++){
builder.append("a");
}
}
}
StringBuilder操作字符串
- java.lang.StringBuilder
该类内部维护一个可变的字符数组,修改都在这里进行,因此解决了字符串修改带来的问题。
注:StringBuilder本身不是字符串,只是用来修改字符串的API。提供了修改字符串的操作:增删改插。
package day01;
/**
* java.lang.StringBuilder
* 由于String的特性不适合频繁修改内容(内存开销大)
* 所以频繁修改字符串时应当使用StringBuilder来完成。
* StringBuilder内部维护一个可变的字符数组,所有修改
* 都是基于该数组完成的。
* @author adminitartor
*
*/
public class StringBuilderDemo1 {
public static void main(String[] args) {
String str = "好好学习java";
StringBuffer builder = new StringBuffer(str);
/*
* StringBuilder append(String str)
* 向当前字符串末尾追加给定内容
*/
//好好学习java,为了找个好工作!
builder.append(",为了找个好工作!");
//获取StringBuilder内部修改好的字符串
str = builder.toString();
System.out.println(str);
/*
* StringBuilder replace(int s,int e,String str)
* 将指定范围内的字符串替换为给定字符串
*/
//好好学习java,为了找个好工作!
//好好学习java,就是为了改变世界!
builder.replace(9, 16, "就是为了改变世界");
str = builder.toString();
System.out.println(str);
/*
* StringBuilder delete(int s,int e)
* 删除指定范围内的字符串
*
* 好好学习java,就是为了改变世界!
* ,就是为了改变世界!
*/
builder.delete(0, 8);
str = builder.toString();
System.out.println(str);
/*
* StringBuilder insert(int index,String str)
* 将给定字符串插入到指定位置
*
*
* ,就是为了改变世界!
* 活着,就是为了改变世界!
*/
builder.insert(0, "活着");
str = builder.toString();
System.out.println(str);
builder.reverse();
str = builder.toString();
System.out.println(str);
}
}
网友评论