API(application programming interface),是已经封装好的提供各种功能的java类,我们可以通过导包使用其类的成员方法,省去了编写java类的繁琐,如random类,Scanner类等均属于API
JDK提供的API可使用Jdk API帮助文档查到,查找API时需要看一下几个部分:
1.看包:如果该API属于java.lang包,则不需要导包,其他情况下需要导包。
2.看构造方法:new 构造方法(形式参数),不同的构造方法构造的对象内容不同;
3.看成员方法:看成员方法的返回值与形式参数类型。
举例:Scanner类
1.看包:属于java.util包
2.看构造方法:
Scanner sc = new Scanner(System.in);
Scanner sc = new Scanner(new File(“myNumbers”));
3.看成员方法:next();nextline();nextboolean();
String是字符串类,是由多个字符组成的数据,String类是一种特殊的引用数据类型,直接输出字符串的话就是输出该对象的数据,不会输出其地址。
1.常用的构造方法:
String(String original) //把字符串数据封装
String(char[] value) //把字符数组数据封装
String(char[] value, int index, int count) //把字符数组中从index位置开始的count个数据封装成数组
同时又更简单的构造方法 String s = “abcd”;即可
String判断功能的成员方法:
返回值类型 | 成员方法 | 描述 |
---|---|---|
boolean | equals(Object obj) | 比较字符串的内容是否相同 |
boolean | equalsignoreCase(String str) | 判断是否相同,忽略大小写 |
boolean | startsWith(String str) | 是否以XXX开头 |
boolean | endwith(String str) | 是否以XXC即为结尾 |
注:返回值为boolean类型,需要用boolean类型接收
题目:键盘录入用户名和密码,给三次机会,成功提示登录成功,失败提示还有x次机会。
分析:
A.定义两个字符串对象,存储已有用户名和密码
B.键盘录入用户名和密码
C.比较用户名和密码是否相同
public class StringTest {
public static void main(String[] args) {
//定义现有用户名和密码
String username = "admin";
String password = "admin";
//键盘录入用户名和密码
Scanner sc = new Scanner(system.in);
System.out.println("请输入用户名:");
String name = sc.nextline();
System.out.println("请输入密码:");
String code = sc.nextline();
//判断是否相同
for(int i = 0;i<3;i++){
if(name.equals(username)&&code.equals(password)){
System.out.println("登陆成功");
break;
}else{
System.out.println("登陆失败");
}
System.out.println("还有"+(2-n)+"次机会");
if(n==2) {
System.out.println("密码输入次数过多");
}
}
}
返回值类型 | 成员方法 | 描述 |
---|---|---|
int | length() | 获取字符串的长度 |
char | charat(int index) | 获取指定索引处的字符 |
int | indexOf(String str) | 获取str在字符串对象中第一次出现的索引 |
String | substring(int start) | 从start处开始截取字符 |
String | substring(int start,int end) | 从start开始截取,到end索引处结束 |
分析:
A:使用循环语句实现遍历功能,
B:使用charat()方法获取字符串上的每个字符
public class StringTest {
public static void main(String[] args) {
String s = "abcde";
for(int i = 0;i
分析:
A:键盘录入一个字符串
B:定义统计变量,类型为int,初始值为0
C:遍历字符串
D:判断字符的类型
设ch为字符:
ch>=“A”&&ch<="Z"为大写字符
ch>=“a”&&ch<="z"为小写字符
ch>=“0”&&ch<="9"为数字字符
public static void main(String[] args) {
//键盘录入字符串
Scanner sc = new Scanner(system.in);
String s = nextline();
//统计变量初始化
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
//遍历
for(int i = 0;i<=s.length-1;i++){
char ch = s.charAt(i);
if(ch>='A'&&ch<='Z') {
bigCount++;
}else if(ch>='a'&&ch<='z') {
smallCount++;
}else if(ch>='0' && ch<='9') {
charCount++;
}else {
System.out.println("该字符"+ch+"非法");
}
}
System.out.println("有"+bigCount+"个大写字符");
System.out.println("有"+smallCount+"个小写字符");
System.out.println("有"+charCount+"个数字字符");
}
返回值类型 | 成员方法 | 描述 |
---|---|---|
char[] | tocharArray() | 把字符串转换为字符数组 |
String | toLowerCase() | 把字符串转换为小写字符串 |
String | toUpperCase() | 把字符串转换为大写字符串 |
分析:
A.键盘录入字符串
B:获取首字母,把其变为大写
C:获取除首字母以外的字符,改成小写;
D:拼接二者
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = sc.nextLine();
//截取首字母
String s1 = s.substring(0, 1);
//截取首字母以外的字符串
String s2 = s.substring(1);
//首字母转大写
s1=s1.toUpperCase();
s2=s2.toLowerCase();
System.out.println(s1+s2);
}
字符串反转
a.把字符串倒着遍历,得到每个字符拼接成字符串
b.把字符串转换为字符串数组,然后对字符数组进行反转,最后把字符数组转换为字符串
public class StringTest2 {
public static void main(String[] args) {
//录入字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
// String result = reverse(s);
String result = reverse2(s);
System.out.println(result);
}
//写方法实现字符串反转
//方法a:把字符串倒着遍历,得到每个字符拼接成字符串
public static String reverse(String s) {
String ss = "";
for(int i = s.length()-1;i>=0;i--) {
ss += s.charAt(i);
}
return ss;
}
//方法b:把字符串转换为字符串数组,然后对字符数组进行反转,最后把字符数组转换为字符串
public static String reverse2(String s) {
char[] chs = s.toCharArray();
for(int start = 0, end = chs.length-1;start<=end;start++,end--) {
char temp = chs[start];
chs[start] = chs[end];
chs[end] = temp;
}
String ss = new String(chs);
return ss;
}
}
我们在为String类型进行拼接操作时,其内存图如下所示。
每次进行拼接是,都要构造新的String对象,既耗时,又浪费,而StringBuilder可以解决这样的问题。
StringBuilder() :构造不带任何字符的字符串生成器,初始容量为16个字符
StringBuilder(str) :构造一个与str相同的生成器;
StringBuilder(int capacity) :构造一个容量为capacity的生成器
返回值类型 | 成员方法 | 描述 |
---|---|---|
StringBuilder | append(任意类型) | 添加功能 |
StringBuilder | reverse() | 反转功能 |
String | toString() | 转化为字符串 |
举例:sb.append(“hello”).append(“world”).append(".");
举例:StringBuilder sb2 = sb.reverse();
举例:
public class StringBuilderTest2 {
public static void main(String[] args) {
//定义一个数组
int[] arr = {1,2,3};
String s = arraytoString(arr);
System.out.println(s);
}
//写方法拼接
//两个明确
// 返回值类型String 参数列表int[] arr
public static String arraytoString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i = 0;i
分析:
String - StringBuilder - reverse - string
public class StringBuilderTest3 {
public static void main(String[] args) {
//键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = sc.nextLine();
s=reverse(s);
System.out.println(s);
}
//写方法实现反转
public static String reverse(String s) {
StringBuilder sb = new StringBuilder(s);
sb.reverse();
String s1 = sb.toString();
return s1;
}
}
分析:
public class StringBuilderTest4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要一个字符串");
String s = sc.nextLine();
boolean flag = isSymmetry(s);
System.out.println(flag);
}
//写方法判断是否为反转字符串
//两个明确 返回值:boolean 参数列表 string s
public static boolean isSymmetry(String s) {
StringBuilder sb = new StringBuilder(s);
sb.reverse();
String result = sb.toString();
return result.equals(s);
}
}