(一):Scannerl类
在常用的API中Sanner类是一个比较常见且使用频率较为高的一个类,所以我在学习的过程中也有自己的笔记,在这里我在把他们分享给你们,个人学习理解体会不喜勿喷.
(1)类概述
A:构造方法
Scanner(InputStream source)
B:常用的方法
1),hasNextXxx();判断是不是还有下一个输入项,其中Xxx可以使int Double类型的,在这里如果判断的是否包涵下个字符串,可以直接使用hasNext().
nextXxx() 获取的是下一个输入项.
在这里我想说的是
Scanner获取数据会出现的一个问题
,我相信不管是现在学习java和从事开发工作的朋友们都会遇到的一个问题,虽然问题不大,但是作为开发人员应该养成处理问题,用最好的方法来实现和解决问题的能力.条条大路通罗马但是我要选择最效率的那一条.
那么具体的问题是什么,请看下面的分析和代码.
(2)常用的方法有以下
public int nextInt(); 获取一个int类型的值
public String nextLine(); 获取一个String类型的值
(1):我先演示用nextInt打印多个int类型的值代码如下
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int i = sc.nextInt();
System.out.println("请输入第二个整数:");
int j = sc.nextInt();
System.out.println("i = " + i + ", j = " + j);
输入的和输出的值正常答应出来
我就不演示打印多个String类型的字符串了,
我直接演示先打印int类型的值,然后在获取String的值,为了方便观察问题,我会在代码中添加多条语句来实现打印便于观察的输出语句...具体代码如下
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int i = sc.nextInt();
System.out.println("请输入第二个字符串:");
String line2 = sc.nextLine();
//System.out.println("i = " + i + ", line2 = " + line2);
System.out.println(i);
System.out.print("11111111111");
System.out.print(line2);
System.out.println("2222222222222");
当你输入第一个数时候,直接打印出如下的答案
请输入第一个整数:
1
请输入第二个字符串:
1
111111111112222222222222
为什么输入第一个数字1,的时候把第二条语句也执行了?
那是因为,nextInt()是键盘录入整数的方法,当我们录入10的时候,其实键盘上录入的
是10和\r\n , nextInt()方法只录入10就结束了,所以当执行到 nextLine的时候,可以接受任意类型的而且\r\n也表示一行的结束,所以才有如上代码问题的输出.
那么怎么去解决呢?
这里我提供两个解决的方法
1,直接创建两次对象,但是对于我们开发人员来说资源很宝贵所以建议忽略这个方法.
2,这个是我简易实用的,只要是键盘录入的都是字符串,所以建议就使用nextLine()方法,避免如上问题的出现.
下面提供我修改之后的代码.
<span style="font-size:18px;">int i = sc.nextInt();
Scanner sc2 = new Scanner(System.in);
String line = sc2.nextLine();
System.out.println(i);
System.out.println(line);</span>
(二):String类(重点啊)
个人觉得一个开发人员的个人开发素养高低直接取决于他对于API像String类和集合的应用熟练程度.而不是要用的时候去查阅API那样太LOW了.所以说这个真的很重要.个人观点不喜勿喷.
(1)String类常见的构造函数
public String();
无参构造
public String(byte[] bytes);
把字节数组转化成字符串
public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
public String(char[] value):把字符数组转成字符串
public String(char[] value,int index,int count):把字符数组的一部分转成字符串
public String(String original):把字符串常量值转成字符串
下面列出个别构造函数的具体事例(只写重要代码)
这个就是 public String (byte[] bytes);
String s1 = new String();
System.out.println(s1);
byte[] arr1 = {97,98,99};
String s2 = new String(arr1);
System.out.println(s2);
(2):String常见方法(列举的都是要记住的)
String类适用于描述字符串事物那么他又有那些常用的方法呢?具体如下
1,获取
非常重要
1.1,字符串中包含的字符数,也就是字符串的长度。
int length();(获取长度)数组也有长度但是它没有括号因为是属性,
字符串有长度但是他是通过方法完成的。
1.2,根据位置index获取该位置上具体的字符。
char charAt(int index):
1.3,根据字符获取该字符串中的位置。
int indexOf(int ch):返回的是指定字符在此字符串中第一次出现的位置。
int indexOf(int ch,int fromIndex):从fromIndex指定的位置开始,
获取此字符串在字符串中出现的位置。
int indexOf(String str):返回的是Str在字符串中第一次出现的位置。
int indexOf(String str,int fromIndex):从fromIndex指定的位置开始,
获取Str在字符串中出现的位置。
int lastIndexOf(int ch) 返回指定的字符在这个字符串中最后一次出现的位置的索引
int lastIndexOf(int ch,int fromIndex)返回指定的字符在这个字符串中
最后一次出现的位置的索引,且是从指定的索引中开始反向索引.
int lassindexOf(String str):返回的是指定字符串在字符串中最右边出现处的索引
int lassindexOf(String str,int fromIndex):返回的是指定字符串在字符串中
最后一次出现初的索引,从指定的索引出反向开始索引.
2,判断
//返回的是布尔类型的
必须掌握!!
2.1,字符串中是否包含某一个子串.
boolean contains(str);
特殊之处: indexOf(str);索引出str第一次出现的位置,如果返回的是-1,说明str字符不存在
索引,也可以用作与 对指定判断是否包含.
if(str.indexOf("adsg")!=-1)
说明有该方法,且可以获取返回的位置.
2.2,字符串中是否有内容.
boolean isEmpty() //判断长度是否为0,当且仅当length()为0时返回ture
2.3,字符串是否是以指定内容开头.
boolean startsWith(str);
2.4,字符串是否是以指定内容结尾.
boolean endsWith(str);
2.5,判断字符串的内容是否相同,复写了object类中的equals方法.
boolean equals(str);
2.6,判断内容是否相同,并忽略大小写.
boolean equalsIgnoreCase();
3,转换.
3.1,将字符数组,转成字符串.
构造函:String(char[]); 将数组全部转换成字符串.
String(char[],offset,count);将数组中的一部分转成字符串.
静态的方法:static String copyValueOf(char[]);
static String copyValueOf(char[] date,int offset,int count)
static String valueOf(char);
**3.2,将字符串,转成字符数组(返回char类型数组).
chat[] toCharArray();
3.3,将字节转换成字符串.
String(byte[]); 将字节全部转换成字符串.
String(byte[],offset,count);将字节中的一部分转成字符串.
3.4,将字符串,转成字节数组.
byte[] getBytes();
特殊:字符串和字节数组在转换过程中,是可以指定编码表的.
3.5,将基本数据类型转成字符串.
static String valueOf(int);
static String valueOf(double);
3+""; ==>String.valueOf(3); 都一样.
4,替换.
String replace(oldchar,newchar);
5,切割.
String[] split(regex); (切割很特别,头和尾部不一样中间也是,这里不详细的解释了)
6,子串.// 获取字符串中的一部分
String substring(begin); //从begin到结尾处
String substring(begin,end);//从begin到end 不包括end.
7,转换.去除空格,比较
将字符串转成大写或者小写
String toUpperCase();
String toLowerCase();
将字符串两端的多个空格去除
String trim();
对两个字符串进行自然顺序的比较
int compareTo(String);
对两个字符串连接起来
1, 直接使用+
2,使用concat();方法
下面是我具体的代码演示的个别方法
class StringMethodDemo{
public static void method_7(){
String s = " sADH djgFG ";
sop(s.toUpperCase());
sop(s.toLowerCase());
sop(s.trim());
}
public static void method_sub(){
String s = "sahdfiog";
sop(s.substring(3));
sop(s.substring(3,5));
}
public static void method_split(){
String s = "zhagnsan, lisi,wangwu,liuqi";
String[] arr = s.split(",");
for(int x = 0;x<arr.length;x++){
sop(arr[x]);
}
}
public static void method_replace(){
String s = "hello java";
String s1 = s.replace('a','n');
sop("s="+s);
sop("s1="+s1);
}
public static void method_trans(){
char[] arr = {'a','b','c','d','e','f','g'};
String s = new String(arr);
sop("s="+s);
String s1 = "asdifighaog";
char[] chs = s1.toCharArray();
for(int x = 0; x<chs.length;x++){
sop("ch="+chs[x]);
}
}
public static void method_is(){
String str ="ArrayDemo.java";
//三个判断分别是判断开头结尾和子串
sop(str.startsWith("Array"));
sop(str.endsWith(".java"));
sop(str.contains("Demo"));
}
public static void method_get(){
String str = "abcdefabc";
//获取长度
sop(str.length());
//根据索引获取字符。
sop(str.charAt(3));//当访问到字符串不存在的时候,会出现字符串角标异常
//根据字符获取索引
sop(str.indexOf('a',3));//如果没有找到返回的是 -1 角标。
//3表示从三号角标开始索引第一次出现A的位置。
//反向索取一个字符串出现的位置
sop(str.lastIndexOf("a"));
//输出的是5,角标位置不会改变.
}
public static void main(String[] args) {
//method_get();
//method_is();
//method_trans();
//method_replace();
//method_split();
//method_sub();
method_7();
}
public static void sop(Object obj){
System.out.println(obj);
}
}