Scanner:
通过观察API发现,该类中的方法没有被static修饰,所以要创建对象去调用,而创建对象,我们要学习一下它的构造方法。
构造方法:
public Scanner(InputStream source)构造一个新的Scanner ,
产生从指定的输入流扫描的值。
流中的字节将使用底层平台的default charset转换为字符 。
java默认使用的编码是Unicode 万国码。
参数:InputStream source (InputStream指的是字节流类型)
简单理解为键盘录入的数据
概述:用于键盘录入数据,在程序中使用
Scanner(InputStream source)
由于该类实在java.util包下,所以将来使用的时候,需要导包。
1、获取键盘上的int类型的数据
nextInt()
2、获取字符串数据
next(): 不会接收到特殊字符
nextLine(): 会接收到特殊字符,如换行符
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//键盘录入一个int类型的数据
//public int nextInt()将输入的下一个标记扫描为int 。
int i = sc.nextInt();
System.out.println(i);
//键盘录入一个字符串
//public String next()查找并返回此扫描仪的下一个完整令牌。
String j = sc.next();
System.out.println(j);
//public String nextLine()将此扫描仪推进到当前行并返回跳过的输入。
//nextLine()可以接收一些特殊的字符,如换行符\r\n \n \t
String s = sc.nextLine();
System.out.println(s);
}
}
String:
概述:简单理解为一个签将许多的字符串起来
字符串是由多个字符组成的一串数据(字符序列)
字符串可以看成是字符数组 ******
特点:
一旦被创建,值不能发生改变,这里的改变指的是,常量池中的字符换本身不可改变
构造方法:
public String()
public String(byte[] bytes)
public String(byte[] bytes,int offset,int length)
public String(char[] value)
public String(char[] value,int offset,int count)
public String(String original)
注意:
1、String s = new String("hello");与String s = "hello";的区别
new的时候会在堆内存中开辟空间。
2、字符串相加的时候需要注意的问题:
a、字符串如果是变量相加,是先在常量池中开辟空间,然后再做拼接。
b、字符串如果是常量相加,是先相加,然后再去常量池中去找,如果找到了,就返回,如果没有找到就开辟新的空间,存储拼接后的值。
public class StringDemo1 {
public static void main(String[] args) {
//public String()
String s = new String();
System.out.println(s); //String类中重写toString()方法
//查看字符串的长度
//public int length()返回此字符串的长度。
System.out.println("字符串s的长度为:" + s.length()); //如果字符串中没有字符,返回0
System.out.println("==========================");
//public String(byte[] bytes) //根据一个字节数组创建出一个字符串对象
byte[] bytes = {99, 98, 66, 56, 77, 41};
String s2 = new String(bytes);
System.out.println("s2:" + s2);
System.out.println("字符串s2的长度为:" + s2.length());
System.out.println("==========================");
//public String(byte[] bytes,int index,int length)
//将字节数组中的一部分转化成字符串
String s3 = new String(bytes, 1, 3);
System.out.println("s3:" + s3);
System.out.println("字符串s3的长度为:" + s3.length());
System.out.println("=====================================================");
//public String(char[] value)S
//将字符数组转成一个字符串
char[] c = {'a', 'b', 'c', 'd', '我', '爱', '冯', '提', '莫', '呀'};
String s4 = new String(c);
System.out.println("s4:" + s4);
System.out.println("字符串s4的长度为:" + s4.length());
System.out.println("=====================================================");
//public String(char[] value,int index,int length)
//将字符数组的一部分转成字符串
String s5 = new String(c, 1, 5);
System.out.println("s5:" + s5);
System.out.println("字符串s5的长度为:" + s5.length());
System.out.println("=====================================================");
//StringIndexOutOfBoundsException
// String s6 = new String(c,4,10);
// System.out.println("s6: "+s6);
// System.out.println("字符串s5的长度为:" + s6.length());
System.out.println("=====================================================");
//public String(String original)
String s7="你好";
String s8=new String(s7);
System.out.println("s8:"+s8);
System.out.println("字符串s8的长度为:" + s8.length());
}
}
字符串是常量,它的值在创建后不能被改变
String s = "hello";
s += "world";
请问s的值是什么?
public class StringDemo2 {
public static void main(String[] args) {
String s="hello";
s+="world";
System.out.println(s);
}
}
String s = new String(“hello”)和String s = “hello”;的区别?
字符串比较之看程序写结果
字符串拼接之看程序写结果
注意事项:
1、==比较引用数据类型的时候,比较的时候地址值
2、String类中使用equals方法比较的是字符串的值,因为String类中重写了equals方法
public class StringDemo3 {
public static void main(String[] args) {
String s1=new String("hello");
String s2="hello";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
}
}
看程序写结果
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
String s5 = "hello";
String s6 = "hello";
System.out.println(s5==s6);
System.out.println(s5.equals(s6));
}
}
1、字符串如果是变量相加,是先在常量池中开辟空间,然后再做拼接。
2、字符串如果是常量相加,是先相加,然后再去常量池中去找,如果找到了,就返回,如果没有找到就开辟新的空间,存储拼接后的值。
public class StringDemo5 {
public static void main(String[] args) {
String s1="hello";
String s2="world";
String s3="helloworld";
String s4="hello"+"world";
System.out.println(s3==s4);
String s5=s1+s2;
System.out.println(s3==s5);
System.out.println(s3==(s1+s2));
System.out.println(s3.equals(s1+s2));
}
}
String类的判断功能:
boolean equals(Object obj)
boolean equalsIgnoreCase(String str)
boolean contains(String str)
boolean startsWith(String str)
boolean endsWith(String str)
boolean isEmpty()
注意:String s = "";与String s = null; 引出字符串之间比较的注意事项,避免空指针异常
public class StringDemo6 {
public static void main(String[] args) {
String s1="helloWorld";
String s2="HelloWorld";
String s3="HelloWorld";
//boolean equals(Object obj)比较字符串中的内容是否相同,区分大小写比较的
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println("=============================");
//boolean equalsIgnoreCase(String str)比较字符串中的内容是否相同,忽略大小写
System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println("=============================");
//boolean contains(String str)
//判断大的字符串中是否包含小的字符串,如果包含,返回true,反之返回false
//区分大小写
System.out.println(s1.contains("Hello"));
System.out.println(s1.contains("hel"));
System.out.println(s1.contains("owo"));
System.out.println("=============================");
//boolean startsWith(String str)
//测试此字符串是否以指定字符串开头
//区分大小写
System.out.println(s1.startsWith("hel"));
System.out.println(s1.startsWith("Hel"));
System.out.println(s1.startsWith("hel34"));
System.out.println("=============================");
//boolean endsWith(String str)
//测试此字符串是否以指定字符串结尾
//区分大小写
System.out.println(s1.endsWith("rld"));
System.out.println(s1.endsWith("rlD"));
System.out.println("=============================");
//boolean isEmpty()
//判断字符串是否是空字符串
String s4="";
String s5=null;
System.out.println(s4==s5);
System.out.println(s5==s4);
System.out.println(s4.equals(s5));
//System.out.println(s5.equals(s4)); // NullPointerException报错
/**
* 注意:今后在做字符串比较内容的时候,很容易出现NullPointerException空指针异常
* 前面调用方法的变量有可能是null值
* 所以今后,为了避免出现这样的问题,如果是变量1.equals(变量2)的时候,在做equals之前判断一下变量1是不是null
* 如果是一个变量1与字符串常量1做equals比较的时候,把字符串常量1放在前面调用方法,因为我们说过单独一个字符串也是一个String对象
*
*/
//需求:比较s6的值是否和s7的值一样
String s6=null;
String s7="hello";
if (s6!=null){
if (s6.equals(s7)){
System.out.println("是一样的");
}else {
System.out.println("s6是null值");
}
//需求2:判断s6的值是否是hello
if ("hello".equals(s6)){
System.out.println("是一样的");
}else {
System.out.println("s6的值不是hello");
}
}
}
}
String类的获取功能:
int length()
char charAt(int index)
int indexOf(int ch)
int indexOf(String str)
int indexOf(int ch,int fromIndex)
int indexOf(String str,int fromIndex)
String substring(int start)
String substring(int start,int end)
/*
String类的获取功能:
int length()
char charAt(int index)
int indexOf(int ch)
int indexOf(String str)
int indexOf(int ch,int fromIndex)
int indexOf(String str,int fromIndex)
String substring(int start)
String substring(int start,int end)
*/
public class StringDemo7 {
public static void main(String[] args) {
String s="helloworld";
//int length() 获取字符串的长度
System.out.println("字符串的长度为:"+s.length());
System.out.println("===========================");
//char charAt(int index) 返回指定索引处的字符
//0<=index<=length()-1
System.out.println(s.charAt(4));
System.out.println(s.charAt(0));
// System.out.println(s.charAt(100));//StringIndexOutOfBoundsException报错
System.out.println(s.charAt(9));
System.out.println("===========================");
//public int indexOf(int ch)返回指定字符第一次出现的字符串内的索引。
//需求:获取o在字符串中第一次出现的位置
System.out.println(s.indexOf('o'));
System.out.println(s.indexOf(97));
//如果此字符串中没有此类字符,则返回-1 。
System.out.println("===========================");
//public int indexOf(String str)返回指定子字符串第一次出现的字符串内的索引。
//返回的是小串的第一个字符在大串中出现的索引位置
//owo
System.out.println(s.indexOf("owo"));
//如果大串中不存在小串,返回-1
System.out.println(s.indexOf("owe"));
System.out.println(s.indexOf("qwer"));
System.out.println("===========================");
// public int indexOf(int ch,int fromIndex)
// 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。
//如果找到了,返回的是字符在整个字符串中的索引
System.out.println(s.indexOf("i",4));
System.out.println(s.indexOf("i",1000));
System.out.println(s.indexOf("i",4));
System.out.println(s.indexOf("i",1000));
System.out.println("==================================");
// int indexOf(String str,int fromIndex)
System.out.println("==================================");
//helloworld
//String substring(int start) 从指定位置处截取字符串,包括开始截取的位置,截取到末尾
//如果给的索引值不存在,报错
System.out.println(s.substring(3)); // loworld
// System.out.println(s.substring(100)); // StringIndexOutOfBoundsException
System.out.println("==================================");
//String substring(int start,int end)
//截取字符串的一部分出来
//截取的串从start位置开始截取,截取到end-1的位置结束
//左闭右开 [,) 含头不含尾。
System.out.println(s.substring(5,8)); // wor
// System.out.println(s.substring(1,20)); //StringIndexOutOfBoundsException
}
}
String类的转换功能:
byte[] getBytes()
char[] toCharArray()
static String valueOf(char[] chs)
static String valueOf(int i)
String toLowerCase()
String toUpperCase()
String concat(String str)
public String[] split(String regex) **********
import java.nio.charset.StandardCharsets;
import java.util.Locale;
/*String类的转换功能:
// byte[] getBytes()
// char[] toCharArray()
//static String valueOf(char[] chs)
//static String valueOf(int i)
// String toLowerCase()
// String toUpperCase()
// String concat(String str)
//public String[] split(String regex) **********
*/
public class StringDemo8 {
public static void main(String[] args) {
String s = "HelloWorLD";
//public byte[] getBytes()使用平台的默认字符集将此String编码为字节序列,将结果存储到新的字节数组中。
//将字符串转成字节数组
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
// System.out.println(bytes);
for (int i = 0; i < bytes.length; i++) {
System.out.print(bytes[i] + "\t");
}
System.out.println();
System.out.println("===============================");
//char[] toCharArray()
//将字符串转成字符数组
char[] chars = s.toCharArray();
for (int j = 0; j < bytes.length; j++) {
System.out.print(chars[j]);
}
System.out.println();
System.out.println("=================================");
//static String valueOf(char[] chs)
//将字符数组转成字符串
String s1 = String.valueOf(chars);
System.out.println(s1);
System.out.println("==============================");
//static String valueOf(int i) 数据库
//将int类型的数据转成字符串
String s2 = String.valueOf(100);// 100 --> "100"
System.out.println(s2);
System.out.println("==============================");
//String toLowerCase()
//将字符串中的内容全部转小写
String s3 = s.toLowerCase(Locale.ROOT);
System.out.println(s3);
System.out.println("==============================");
//String toUpperCase()将字符串中的内容全部转大写
String s4 = s.toUpperCase();
System.out.println(s4);
System.out.println("==============================");
//String concat(String str)
//将小括号中str的字符串拼接到大字符串的后面
String s5 = s.concat("hadoop");
System.out.println(s5);
System.out.println("==============================");
//public String[] split(String s)
String s6 = "hello world hello java world";
//需求:求出字符串中的每一个单词
String[] strings = s6.split("");
for (int j = 0; j < strings.length; j++) {
System.out.print(strings[j]);
}
}
}
String类的其他功能:
替换功能
String replace(char old,char new)
String replace(String old,String new)
去除字符串两边若干个空格
String trim()
按字典顺序比较两个字符串内容是否一样,这里涉及到源码分析
int compareTo(String str)
int compareToIgnoreCase(String str)
/*
String类的其他功能:
替换功能
String replace(char old,char new)
String replace(String old,String new)
去除字符串两空格
String trim()
按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str)
*/
public class StringDemo9 {
public static void main(String[] args) {
String s = "hellowrodldajavahadoopowollohelloowo";
//String replace(char old,char new)
//将新的字符串替换字符串中指定的所有字符,并返回一个替换后的字符串
String s1 = s.replace('l', 'q');
System.out.println(s);
System.out.println(s1);
System.out.println("==================================");
//String replace(String old,String new)
//将字符串中就的小串用新的小串替换,返回一个替换后的字符串
String s2=s.replace("owo","===");
System.out.println(s);
System.out.println(s2);
System.out.println();
//如果被替换的字符串不存在会是什么情况呢?返回的是原本的字符串
String s3=s.replace("qwer","LOL");
System.out.println(s);
System.out.println(s3);
System.out.println("==================================");
//String trim() 去除字符串两边的若干个空格
String s5=" HelloWorld ";
System.out.println(s5);
System.out.println(s5.trim());
System.out.println("==================================");
//int compareTo(String str) //比较字符串是否相同,如果相同返回0
String s6="hello";// h的ASCII码值是 104
String s7="hello";
String s8="abc";// a的ASCII码值是 97
String s9="qwe"; // q的ASCII码值是 113
System.out.println(s6.compareTo(s7));// 0
System.out.println(s6.compareTo(s8));// 7
System.out.println(s6.compareTo(s9)); // -9
String s10="hel";
System.out.println(s6.compareTo(s10));//2
}
}
1:遍历获取字符串中的每一个字符
2:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
/*
1:遍历获取字符串中的每一个字符
2:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
*/
public class StringTest1 {
public static void main(String[] args) {
String s = "javaMySqlHadoopHive12138";
//遍历获取字符串中的每一个字符
//将字符串转成字符数组
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.print(chars[i]);
}
System.out.println();
System.out.println("===================================");
//统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
//1、定义三个变量统计三个结果
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
//2、遍历字符数组得到每一个字符,判断每一个字符是属于哪一类
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c >= 'A' && c <= 'Z') {
bigCount++;
} else if (c >= 'a' && c <= 'z') {
smallCount++;
} else if (c >= '0' && c <= '9') {
numberCount++;
}
}
System.out.println("大写字符的个数为:" + bigCount);
System.out.println("小写字符的个数为:" + smallCount);
System.out.println("数字字符的个数为:" + numberCount);
}
}
把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
举例:"hADoopJava" --> "Hadoopjava"
1、全部转小写
2、获取第一个字符转大写
具体实现:
1、截取第一个字符和其他字符
2、第一个字符转大写
3、其他字符转小写
4、拼接
import java.util.Locale;
public class StringTest2 {
public static void main(String[] args) {
String s = "hADoopJava";
System.out.println("转换之前" + s);
//将字符串中的所有字符全部转小写
String s1 = s.toLowerCase();
//获取第一个字符
// char s2=s1.charAt(0);
String s2 = s1.substring(0, 1);
// 将第一个字符转大写
String s3 = s2.toUpperCase();
//获取除第一个字符以外的其他字符
String s4=s1.substring(1);
//将转大写的字符与其余的字符做拼接
String result=s3.concat(s4);
System.out.println("转换之后:"+result);
System.out.println("============用链式编程转换==============");
String result2=s.substring(0,1)
.toUpperCase(Locale.ROOT)
.concat(s.substring(1).toLowerCase());
System.out.println("转换之后:"+result2);
}
}
/*
把数组中的数据按照指定个格式拼接成一个字符串
举例:int[] arr = {1,2,3}; 输出结果:[1, 2, 3]
*/
public class StringTest3 {
public static void main(String[] args) {
int[] arr={1,2,3};
String s="";
for (int i=0;i< arr.length;i++){
String s1 = String.valueOf(arr[i]);
if(i==0){
System.out.print(s.concat("[").concat(s1).concat(","));
}else if(i==arr.length-1){
System.out.print(s.concat(s1).concat("]"));
}else {
System.out.print(s.concat(s1).concat(","));
}
}
System.out.println(s);
}
}
字符串反转
举例:键盘录入”abc” 输出结果:”cba”
分析:
1、导包并创建键盘录入对象
2、创建一个空的字符串
3、将字符串转成字符数组
4、倒着遍历,得到每一个字符
5、将每次获取到的字符进行拼接
6、输出
/*
字符串反转
举例:键盘录入”abc” 输出结果:”cba”
分析:
1、导包并创建键盘录入对象
2、创建一个空的字符串
3、将字符串转成字符数组
4、倒着遍历,得到每一个字符
5、将每次获取到的字符进行拼接
6、输出
*/
import java.util.Scanner;
public class StringTest4 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.next();
//创建一个空的字符串
String s1 = "";
//将字符串转成字符数组
char[] chars = s.toCharArray();
//倒着遍历,得到每一个字符
for (int i = chars.length - 1; i >= 0; i--) {
//将每个字符转成字符串
String s2 = String.valueOf(chars[i]);
// System.out.println(s2);
//将每次获取到的字符进行拼接
s1 = s1.concat(s2);
}
System.out.println("倒序后的字符串为:" + s1);
}
}
统计大串中小串出现的次数
举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundasdqwdeqwdwdasvgwrefasjavajavajijijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagunda”
中java出现了多少次
public class StringTest5 {
public static void main(String[] args) {
//创建一个字符串
String bigString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundasdqwdeqwdwdasvgwrefasjavajavajijijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagunda";
//定义要查找的小串:java
String minString = "java";
//定义一个变量统计小串出现的次数
int count = 0;
//在大串中找到小串第一次出现的位置
int index = bigString.indexOf(minString);
//也有可能第一次找的时候就没有找到
if (index == -1) {
System.out.println("该大串中没有小串" + minString);
} else {
while (index != -1) {
count++;
//截取字符串
int startIndex = index + minString.length();
bigString = bigString.substring(startIndex);
//继续去找小串出现的位置索引
index = bigString.indexOf(minString);
System.out.println("找到了小串,截取后的大串为:"+bigString);
}
}
System.out.println("======================================================");
System.out.println(minString + "在大串" + bigString + "中出现的次数为:" + count);
}
}