常用类
学习的标准:
1、创建对象,有什么属性,有什么方法(方法名,参数,返回值)
2、类,方法体如何实现的
学习的方法:
1、Ctrl+Shift+T 搜索一个类,通过outline查看类的构成
2、API帮助文档
String
String类代表字符串。Java 程序中的所有字符串字面值(如 “abc”)都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。
属性
怎么理解字符串是常量?从String类中的属性入手:
类中维护着一个final类型char[] value,用来存储所有字符。可见此value一赋值不可再更改。
我们之前写的代码中,str是变量,其中先是"a"的地址,执行第2句的连接,因为"a"是常量,不可更
改,所以必须新开空间来存储连接后的“ab”,变量str中存储的更新为"ab"的地址。所以str引用是变
量,字符串对象是常量。
构造方法
除了String str=“a”;用字面量来创建字符串对象,还可以使用构造方法。常用的构造方法有
String()
String(char[] ch)
String(String str)
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
String str="a";
str=str+“b”;构造方法的作用主要是给属性赋值,所以从源码中可以看出,不管是哪个构造方法都给value赋值。
补充:类中除了构造方法给value赋值以外,并未提供set方法。甚至get方法都没有。如果先获取
value的值,可通过char[] toCharArray();
举例:判断字符串是否是回文串
常用方法
int length() 获取字符串的长度
判断密码是否至少是6位
判断身份证号是否是18位
boolean isEmpty() //判断字符串是否为空,即长度是否为0
//String()
String s=new String();
//String(char[])
char[] chs= {'a','b','c'};
String s2=new String(chs);
//String(char[] ch,int offset, int count)
String s3=new String(chs,0,2);
//String(String str)
String s5=new String("abc");
public String() {
this.value = "".value;
}
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
public boolean isHuiWen(String str) {
boolean flag=true;//true是 false不是
char[] chs=str.toCharArray();
int len=chs.length;
for (int i = 0; i < len/2; i++) {
if(chs[i]!=chs[len-1-i]) {
flag=false;
break;
}
}
return flag;
}//判断一个字符串是否为空
//null和“”都认为是空
public boolean isEmpty(String s) {
return s==null||s.isEmpty();
}
== 比较地址。
常量之间用+号连接,编译时会自动连接;变量参与,都会新开空间产生新对象。
new关键字也会产生新对
String s1="a";
String s2="a";
System.out.println(s1==s2);//true
String s4="ab";
String s5="a"+"b";//两个常量之间连接,编译时就会连接成功
System.out.println(s4==s5);//true
String s6=s1+"b";
System.out.println(s4==s6);//false
String s3="b";
String s7=s1+s3;
System.out.println(s4==s7);//false
String s8="abc";
String s9=new String("abc");
System.out.println(s8==s9);//false
boolean equals(Object anObject) //比较值是否相等。
//String类源码 ,建议查看
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
练习:输入两次密码,判断是否输入一致
String toLowerCase() 大写转换成小写
String toUpperCase() 小写转大写
boolean equalsIgnoreCase(String anotherString) 忽略大小写比较练习:输入验证码,忽略大小写比较是否相等
int compareTo(String anotherString) 比较 返回值含义:0=等于 正数=大于 负数=小于
//对字符串数组升序,冒泡实现
//此代码选择学习
public static void main(String[] args) {
String[] names= {"Lily","Apple","Tom","Jack"};
sort(names);
for (String string : names) {
System.out.print(string+" ");
}
}
public static void sort(String[] strs) {
int len=strs.length;
for (int i = 0; i < len-1; i++) {
for (int j = 0; j < len-1-i; j++) {
if(strs[j].compareTo(strs[j+1])>0) {
String temp=strs[j];
strs[j]=strs[j+1];
strs[j+1]=temp;
}
}
}
}
char charAt(int index) 返回对应index位置上的字符 ,index的范围[0,len-1]
String str="hello";
System.out.println(str.charAt(0));//h
//System.out.println(str.charAt(5));//越界 StringIndexOutOfBoundsException
//从键盘上输入一个字符,转换成char类型
Scanner input=new Scanner(System.in);
System.out.println("继续吗?y/n:");
String s=input.next();
char c=s.charAt(0);
System.out.println(c);
练习:输入一个字符串,统计字母出现的次数
int indexOf(int ch) 从左往右找第一个出现int字符的索引位置,如果找不到返回-1
int indexOf(int ch, int fromIndex) 从fromIndex位置往右开始查找,第一个出现int字符的索引位置,
如果找不到返回-1
int indexOf(String str)从左往右找第一个出现str的索引位置,如果找不到返回-1
int lastIndexOf(int ch) 从右往左找第一个出现int字符的索引位置,如果找不到返回-1
int lastIndexOf(String str) 从右往左找第一个出现str的索引位置,如果找不到返回-1
检查邮箱格式是否包含@
查找路径中最后一个分隔符的索引位置(D:\AF2205\Java\第三周测试\王盟\abc.txt)
String substring(int beginIndex) //从beginIndex开始到结束截取子串
String substring(int beginIndex, int endIndex) [beginIndex,endIndex)之间的子串//从一个路径中获取文件名
public String getFilename(String path) {
//找最后一个\\的位置
int index=path.lastIndexOf('\\');
int end=path.length();
String fileName=path.substring(index+1,end);
return fileName;
// return path.substring(path.lastIndexOf('\\'));
}
Test5 t=new Test5();
String name=t.getFilename(path);
System.out.println(name);
boolean startsWith(String prefix) 判断字符串是否以prifix开头
boolean endsWith(String suffix) 判断字符串是否以suffix结尾
//http://www.baidu.com 判断是否是http开头
String url="http://www.baidu.com";
System.out.println(url.startsWith("https"));
//boolean endsWith(String suffix) 判断字符串是否以suffix结尾
String path="D:\\AF2205\\Java\\第三周测试\\王盟\\abc.txt";
System.out.println(path.endsWith("png"));
字符串的连接
String concat(String str) 将指定字符串连接到此字符串的结尾。
// +
String s="a";
String s2=s+"b";//ab
int num=12;
System.out.println("这个数:"+num);
//整数转换字符串
String numStr=num+"";
//concat
String str="abc";
String str2=str.concat("....");
System.out.println(str2);
String[] split(String regex) 拆分字符串
String str="长亭外,古道边,芳草碧连天";
String[] arr=str.split(",");
for (String string : arr) {
System.out.println(string);
}
练习:转换日期的格式 :2022-06-21 —>2022年06月21日
String trim() //去除一个字符串前面和后面的空格
String str2=" 2354 64 ";
System.out.println(str2.length());
str2=str2.trim();
System.out.println(str2.length());//7,中间的空格无法去除
String valueOf(xxx) 把其它类型的数据转换成String类型
Math
Math 执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
static double abs(double a) 求绝对值
static double ceil(double a) //比a大的最小整数---向上取整
static double floor(double a) //比a小的最大整数--向下取整
static int round(float a) //四舍五入
static double random() [0.0,1.0)
static double pow(double a, double b) //返回第一个参数的第二个参数次幂的值。
static double sqrt(double a) //返回正确舍入的 double 值的正平方根
Random
int nextInt(int n) [0,n)之间的整数
Arrays 数组的工具类
static void sort(int[] a)
static String toString(int[])// 把数组转换成字符串输出
static String deepToString(Object[] a)
static int binarySearch(int[] a, int key) // 二分查找,
static int[] copyOf(int[] original, int newLength)// 扩容/缩容
static boolean equals(int[] a, int[] a2)
static void fill(int[] a, int val)//将指定的 int 值分配给指定 int 型数组的每个元素。
包:相当于文件夹
1、分类管理java文件
2、避免java文件的重名
3、保护资源。主要访问控制权限 public private default
包的创建
1、new package
2、创建类的时候,添加包名
包名:
1、公司域名的倒写[+部门名称]+项目名称+模块名
www.hipeak.com
com.hipeak.phone.newstitle.weititle
com.hipeak.af.stusys.model
com.hipeak.af.stusys.dao
com.hipeak.af.stusys.view
2、.只有分隔的作用,就不要以.开头或结束
包的声明
package com.hipeak.af.stusys.model;
必须位于类中第一行非注释性语句
导入包
使用别的包中的类,就需要导入。java.lang包除外
导入的语法import 包名.类名; —包名.类名唯一确定类的位置 类的完全限定名
import 包名.*;
快捷键:Ctrl+Shift+O