编程的蜗牛

颓废,始于首次的懒惰与原谅。

导航

Java基础-Scanner、Random、字符串

一、Scanner类

比如:nextlnt():只读取int值,就是只能读取整数类型的数据,如果输入了非整型的数据(浮点型字符串等)就会报错。
nextFloat()、nextDouble()这些也是以此类推,只能读取符合该类型的数据。

next()和nextLine()的区别(重点)

1、next():只读取输入直到空格。它不能读两个由空格或符号隔开的单词。此外,next()在读取输入后将光标放在同一行中。

2、nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即:它读到行尾)。读取输入后,nextLine()将光标定位在下一行。

结论:

next()方法是以空格为输入结束符。

nextLine() 方法是以换行符为输入结束符。

注意:

     1、若用字符串数组对输入数据进行接收,nextLine()方法,一行接收为一个元素。若用next方法对其进行接收,用空格分隔的数据为一个元素。

   2、若知道输入数据的个数则采用数组进行接收,或String类进行接收都可以。若不知道输入数据的多少,则只能采用String类对其输入结果进行接收。

二、Random类

Random类,他可以在指定的取值范围内随机产生数字。在Random类中有两种构造方法。

Random()   无参构造方法,用于创建一个伪随机数生成器。

Random(long seed) 有参构造方法,使用一个long类型的seed种子创建伪随机数生成器。

第一种构造方法是使用默认当前系统时间的毫秒数作为种子数,每次种子的结果都不会相同,所以每次得到的结果都不会相同。

第二种构造方法是使用自己指定的种子,所以结果,如果种子相同,结果相同(所以这是伪随机数)。

注意:

  Random类中还有更多的方法,其中,Random类的nextDouble()方法返回的是0.0至1.0之间的double类型值。

  nextFloat()方法返回的是0.0至1.0之间的float类型值。

  nextInt(int n)返回的是0(包括)至n(不包括)之间的int值;

三、字符串String类

  String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。

  字符串常量池:

       我们知道字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多。

  JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串(这点对理解上面至关重要)。

Java中的常量池,实际上分为两种形态:静态常量池运行时常量池
静态常量池:即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
运行时常量池:则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。

字符串构造方法:

1、public String()
无参构造方法,用来创建空字符串的String对象。

2、public String(String value)
用已知的字符串value创建一个String对象。

3、public String(char[] value)
用字符数组value创建一个String对象。

1 char[] value = {'a','b','c','d'};
2 String str4 = new String(value);//相当于String str4 = new String("abcd");

4、public String(char chars[], int startIndex, int numChars)
用字符数组chars的startIndex开始的numChars个字符创建一个String对象。

1 char[] value = {'a','b','c','d'};
2 String str5 = new String(value, 1, 2);//相当于String str5 = new String("bc");

5、public String(byte[] values)
用比特数组values创建一个String对象。

1 byte[] strb = new byte[]{65,66};
2 String str6 = new String(strb);//相当于String str6 = new String("AB");

图解:

 常用方法:

 1 public class CommonClass {
 2     public static void main(String[] args) {
 3        String str = "abcdefg";
 4 
 5         System.out.println(str.length()); //字符串长度
 6         System.out.println(str.charAt(4)); //求字符串某一位置字符
 7 
 8         //提取子串
 9         System.out.println(str.substring(2));
10         System.out.println(str.substring(2,5));
11 
12         /*字符串比较
13         1)public int compareTo(String anotherString)//该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。
14         2)public int compareToIgnore(String anotherString)//与compareTo方法相似,但忽略大小写。
15         3)public boolean equals(Object anotherObject)//比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
16         4)public boolean equalsIgnoreCase(String anotherString)//与equals方法相似,但忽略大小写。*/
17         //字符串连接
18         System.out.println(str.concat(str)); //abcdefgabcdefg
19         /*字符串中单个字符查找
20         1)public int indexOf(int ch/String str)//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
21         2)public int indexOf(int ch/String str, int fromIndex)//改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。
22         3)public int lastIndexOf(int ch/String str)//该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。
23         4)public int lastIndexOf(int ch/String str, int fromIndex)//该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。*/
24 
25         //字符串中字符的大小写转换
26         System.out.println(str.toUpperCase()); //ABCDEFG
27         System.out.println(str.toLowerCase()); //abcdefg
28 
29         /*字符串中字符的替换
30         1)public String replace(char oldChar, char newChar)//用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
31         2)public String replaceFirst(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
32         3)public String replaceAll(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。*/
33 
34         //String trim()//截去字符串两端的空格,但对于中间的空格不处理。
35         System.out.println(" a bc ed "); //a bc ed
36 
37         //boolean startsWith(String prefix)或boolean endWith(String suffix)
38         //用来比较当前字符串的起始字符或子字符串prefix和终止字符或子字符串suffix是否和当前字符串相同,重载方法中同时还可以指定比较的开始位置offset。
39 
40         //regionMatches(boolean b, int firstStart, String other, int otherStart, int length)
41         //从当前字符串的firstStart位置开始比较,取长度为length的一个子字符串,other字符串从otherStart位置开始,指定另外一个长度为length的字符串,两字符串比较,当b为true时字符串不区分大小写。
42 
43         //contains(String str)
44         //判断参数s是否被包含在字符串中,并返回一个布尔类型的值。
45 
46         //String[] split(String str)
47         // 将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回。
48         String str1 = "asd!qwe|zxc#ll";
49         String[] str2 = str1.split("!|#");//str1[0] = "asd";str1[1] = "qwe";str1[2] = "zxc";
50         for (int i = 0; i < str2.length; i++) {
51             System.out.println(str2[i]);
52         }
53 
54         /*字符串与基本类型的转换
55         1、字符串转换为基本类型
56         java.lang包中有Byte、Short、Integer、Float、Double类的调用方法:
57         1)public static byte parseByte(String s)
58         2)public static short parseShort(String s)
59         3)public static short parseInt(String s)
60         4)public static long parseLong(String s)
61         5)public static float parseFloat(String s)
62         6)public static double parseDouble(String s)*/
63 
64         /*基本类型转换为字符串类型
65         String类中提供了String valueOf()放法,用作基本类型转换为字符串类型。
66         1)static String valueOf(char data[])
67         2)static String valueOf(char data[], int offset, int count)
68         3)static String valueOf(boolean b)
69         4)static String valueOf(char c)
70         5)static String valueOf(int i)
71         6)static String valueOf(long l)
72         7)static String valueOf(float f)
73         8)static String valueOf(double d)*/
74 
75         /*进制转换
76         使用Long类中的方法得到整数之间的各种进制转换的方法:
77         Long.toBinaryString(long l)
78         Long.toOctalString(long l)
79         Long.toHexString(long l)
80         Long.toString(long l, int p)//p作为任意进制*/
81     }
82 }

 

可变字符串:

  当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

  和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

  在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。

  StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

  由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

三者共同之处:

  都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。

三者不同之处:

  String:适用于少量的字符串操作的情况。

  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。

  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。

StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。

String实现了三个接口:Serializable、Comparable<String>、CarSequence

StringBuilder只实现了两个接口Serializable、CharSequence,相比之下String的实例可以通过compareTo方法进行比较,其他两个不可以。

使用:

构造方法:

public StringBuilder()   创建一个空白可变字符串对象,不含有任何内容。
public StringBuilder(String str)  根据字符串的内容,来创建可变字符串对象。
常用方法:
1、append(String str)/append(Char c):字符串连接。
2、toString():返回一个与构建起或缓冲器内容相同的字符串。
3、appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this。
4、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)。
5、insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)。
6、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串。
 

 

posted on 2022-01-20 10:41  粼溪  阅读(144)  评论(0)    收藏  举报