Java语言基础
常见对象
Scanner类
- Scanner的概述: 用于获取用户的键盘输入。(JDK5以后)
- Scanner的构造方法原理:
Scanner(InputStream source)
System类下有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入。 - hasNextXxx()和nextXxx()方法:
基本格式:
a:hasNextXxx() : 判断下一个是否是某种类型的元素;
b:nextXxx() : 获取下一个输入项。
其中Xxx可以是Int,Double等类型;如果需要判断是否包含下一个字符串,则可以省略Xxx。 - 常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值
//通过while的死循环,循环录入一个整数,直到录入的类型为整数结束
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
while (true) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
if (scanner.hasNextInt() ){
int i = scanner.nextInt();
System.out.println(i);
break;
} else {
System.out.println("录入类型不正确,请重新输入一个整数");
}
}
}
}
String类
- 字符串的概述:
字符串是由多个字符组成的一串数据(字符序列);也可以看成是字符数组; - String类的概述:
a:字符串字面值"abc"也可以看成是一个字符串对象。
b:字符串是常量,一旦被创建,就不能被改变。 - String类的构造方法:
public String():空构造
public String(byte[] bytes):把字节数组转成字符串
public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串(index:表示的是从第几个索引开始, length表示的是长度)
public String(char[] value):把字符数组转成字符串
public String(char[] value,int index,int count):把字符数组的一部分转成字符串
public String(String original):把字符串常量值转成字符串 - String类的判断功能:
public boolean equals(Object obj): 比较字符串的内容是否相同,区分大小写
public boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写
public boolean contains(String str):: 判断字符串中是否包含传递进来的字符串
public boolean startsWith(String str): 判断字符串是否以传递进来的字符串开头
public boolean endsWith(String str): 判断字符串是否以传递进来的字符串结尾
public boolean isEmpty(): 判断字符串的内容是否为空串 “”。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//案例演示: 需求:模拟登录,需让用户输入特定的用户名和密码,给三次机会,并提示还有几次。
String name="张三";
String password="123456";
System.out.println("你有三次机会...");
int a=1;
while(a<=3){
Scanner scanner=new Scanner(System.in);
System.out.println("请输入用户名:");
String uname=scanner.nextLine();
System.out.println("请输入密码:");
String psw=scanner.nextLine();
if(uname.equals(name)&&psw.equals(password)){
System.out.println("登陆成功...");
break;
} else if ((a-3)==0){
System.out.println("卡被回收");
}else {
int b=3-a;
System.out.println("用户名或密码输入有误请重新输入,还剩余"+b+"次机会");
}
a++;
}
}
}
- String类的获取功能:
public int length(): 获取字符串的长度。
public char charAt(int index): 获取指定索引位置的字符
public int indexOf(int ch): 返回指定字符在此字符串中第一次出现处的索引。
public int indexOf(String str): 返回指定字符串在此字符串中第一次出现处的索引。
public int indexOf(int ch,int fromIndex): 返回指定字符在此字符串中从指定位置后第一次出现处的索引。
public int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
public String substring(int start): 从指定位置开始截取字符串,默认到末尾。
public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串。lastIndexOf系列的就是从字符串末尾开始进行的操作
//遍历字符串:
public static void main(String[] args) {
String s="这是一个字符串";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
System.out.println(c);
}
}
//例:输入一个字符串统计其中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = scanner.nextLine();
int num1=0;
int num2=0;
int num3=0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c>='a'&&c<='z'){
num1++;
}else if (c>='A'&&c<='Z'){
num2++;
}else{
num3++;
}
}
System.out.println("小写字母个数为:"+num1+"个");
System.out.println("大写字母个数为:"+num2+"个");
System.out.println("数字个数为:"+num3+"个");
}
- String类的转换功能
public byte[] getBytes(): 把字符串转换为字节数组。
public char[] toCharArray(): 把字符串转换为字符数组。
public static String valueOf(char[] chs): 把字符数组转成字符串。
public static String valueOf(int i): 把int类型的数据转成字符串。
public String toLowerCase(): 把字符串转成小写。
public String toUpperCase(): 把字符串转成大写。
public String concat(String str): 把字符串拼接。
注意:String类的valueOf方法可以把任意类型的数据转成字符串。
//例:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
public static void main(String[] args) {
String str="aaaEWSAKDFdlks";
System.out.println(str.substring(0,1).toUpperCase().concat(str.substring(1).toLowerCase()));
}
- String类的其他功能:
public String replace(char old,char new) : 将指定字符进行互换
public String replace(String old,String new): 将指定字符串进行互换
public String trim(): 去除两端空格
public int compareTo(String str): 会对照ASCII 码表,从第一个字母进行减法运算,返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0
public int compareToIgnoreCase(String str): 跟上面一样 只是忽略大小写的比较
//例:在一个长字符串中查找一个短字符串出现的次数;例如下面代码中查找"java"出现的次数:
public static void main(String[] args) {
String str="woyaoxuejava,xihuanjava,aijava,javajavawozuiai";
String minstr="java";
int count=0;//定义一个数,用来统计次数
int i = str.indexOf(minstr);
while (i != -1){
count++;
str = str.substring(i + minstr.length());
i=str.indexOf(minstr);
}
int index;
while ((index = str.indexOf(minstr)) != -1) {
count++;
str = str.substring(index + minstr.length());
}
System.out.println("java出现了"+count+"次");
}
StringBuffer和StringBuilder类
- StringBuffer类概述:我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间;而StringBuffer就可以解决这个问题,线程安全的可变字符序列。
- StringBuffer、StringBuilder、String类:
- String的对象一旦产生后就不也能修改,重新赋值就会产生两个不同的对象,不能被继承;
StringBuffer的对象可以修改 - StringBuffer与StringBilder的区别:
运行速度:StringBuffer>StringBilder
线程安全:StringBuffer非安全,StringBilder安全
- StringBuffer类的构造方法:
public StringBuffer(): 无参构造方法
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str): 指定字符串内容的字符串缓冲区对象 - StringBuffer的方法:
public int capacity():返回当前容量。 理论值
public int length():返回长度(字符数)。实际值 - StringBuffer的添加功能:
public StringBuffer append(String str): 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身;
public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 - StringBuffer的删除功能:
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身 - StringBuffer的替换和反转功能:
public StringBuffer replace(int start,int end,String str): 从start开始到end用str替换
public StringBuffer reverse(): 字符串反转 - StringBuffer的截取功能:
public String substring(int start): 从指定位置截取到末尾
public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
【注意】:返回值类型不再是StringBuffer本身
//例1:
public static void main (String[] args) {
StringBuffer buffer = new StringBuffer("Hello");
//向StringBuffer对象中添加新数据"World"
buffer.append("World");
System.out.println(buffer);
//向StringBuffer对象Hello与World之间插入"java"
buffer.insert(buffer.indexOf("o")+1,"java");
System.out.println(buffer);
//把StringBuffer对象中"World"删除
buffer.delete(buffer.indexOf("W"),buffer.indexOf("d")+1);
//把StringBuffer对象中"Hello" 更改成"Hi"
buffer.replace(buffer.indexOf("H"),buffer.indexOf("o")+1,"Hi");
System.out.println( buffer.toString() );
}
打印结果:
HelloWorld
HellojavaWorld
Hijava
- StringBuffer和String的相互转换
- String ------>StringBuffer
a:通过构造方法
b:通过append()方法 - StringBuffer -------> String
a: 使用substring方法
b:通过构造方法
c:通过toString()方法
- String和StringBuffer分别作为参数传递:
String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递;
/例2:
public void method (StringBuffer sb) {
sb.append("StringBuffer");
}
public void method (String str) {
str = str + "String";
}
public static void main (String[] args) {
String str = new String("java");
StringBuffer buffer = new StringBuffer("Hello");
Demo11 d = new Demo11();
d.method( str );
System.out.println( str );
d.method( buffer );
System.out.println( buffer );
}
打印结果:
java
HelloStringBuffer
//下篇再见…谢谢