API概述
应用程序编程接口。
java API:指的是JDK中提供的各种功能的Java类。这些类将底层的实现封装起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
Scanner类
完成输入操作。引入包:import java.util.Scanner
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
string str=sc.nexrLine();
System.out.println(str);
各数据类型的输入格式:
String
字符串的特点:
1.字符串不可变,它们的值在创建后不能被更改。
2.虽然String的值是不可变的,但是它们可以被共享。
3.字符串效果上相当于字符数组(char[ ]),但是底层原理是字节数组(byte[ ])。
String构造方法
创建一个空白字符串对象:
String s1=new String();
//此时s1为空
根据字符数组的内容来创建字符串对象:
char[] c={'a','b','c'};
String s=new String(c);
System.out.println(s);
//输出:abc
根据字节数组的内容来创建字符串对象:
byte[] bys= {97,98,99};
String s2=new String(bys);
System.out.println(s2);
还有一种是直接赋值。建议使用这种方式。
String对象的特点
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同。
当直接给字符串赋值时,若s1的内容与s2的内容相同,那么它们的地址也相同。
字符串的比较
使用==做比较:
1.基本类型:比较的是数据值是否相同。
2.引用类型:比较的是地址值是否相同。
字符串是对象,用==做比较的话是比较它们的地址。
若想比较内容是否相同,是通过equals()方法来实现的。
public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串。
package myday;
import java.util.Scanner;
public class MyDay {
public static void main(String[] args) {
String s1="aaa";
String s2="bbbb";
if(s1.equals(s2))
System.out.println("yes");
else
System.out.println("no");
//no
}
}
遍历字符串
public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始。
public int length():返回字符串长度。
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String s="a12b";
for(int i=0;i<s.length();i++)
System.out.println(s.charAt(i));
}
拼接字符串
public static void main(String[] args) {
int[] arr= {1,2,3};
String s=arrayToString(arr);
System.out.println(s);
}
public static String arrayToString(int[] arr) {
String s1="";
s1+='[';
for(int i=0;i<arr.length;i++)
{
if(i==arr.length-1)
s1+=arr[i];
else
{
s1+=arr[i];
s1+=',';
}
}
s1+=']';
return s1;
}
字符串反转
public static void main(String[] args) {
String s="321";
String s1=arrayToString(s);
System.out.println(s1);
}
public static String arrayToString(String s) {
String s1="";
for(int i=s.length()-1;i>=0;i--)
{
s1+=s.charAt(i);
}
return s1;
}
StringBuilder
为什么使用StringBuilder?
StringBuilder是一个可变的字符串类,可看做一个容器。这里的可变指的是StringBuild对象中的内容是可变的。
StringBuilder的构造方法
public static void main(String[] args) {
StringBuilder s1=new StringBuilder();
System.out.println("s1.length="+s1.length());
StringBuilder s2=new StringBuilder("hello");
System.out.println("s2="+s2);
System.out.println("s2.length="+s2.length());
//输出
//s1.length=0
//s2=hello
//s2.length=5
}
StringBuilder的添加和反转方法
public static void main(String[] args) {
StringBuilder s1=new StringBuilder("nih");
StringBuilder s2=s1.append("hello");
System.out.println("s1="+s1);
System.out.println("s2="+s2);
System.out.println(s1==s2);
//输出:s1=nihhello
// s2=nihhello
// true(说明s1和s2占的是同一块内存,所以值一样)
}
因为append添加完数据会返回对象本身,所以也可以不用使用其他StringBuilder类型的变量来接收。
public static void main(String[] args) {
StringBuilder s1=new StringBuilder();
s1.append("111");
s1.append("222");
s1.append("333");
System.out.println(s1);
//111222333
}
既然append可以返回对象本身,那么可以有链式编程,进行一次append后还是对象,接着进行append操作。
public static void main(String[] args) {
StringBuilder s1=new StringBuilder();
//链式编程
s1.append("111").append("222").append("333");
System.out.println(s1);
//反转字符串
s1.reverse();
//333222111
}
StringBuilder和String相互转换
StringBuilder转换为String:
public String toString():通过toString()就可以实现把StringBuilder转换为String。
StringBuilder s1=new StringBuilder("111");
String s=s1.toString();
System.out.println(s);
//111
//直接使用String s=s1;是错误的
String转换为StringBuilder :
public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder。
public static void main(String[] args) {
String s="aaa";
StringBuilder s1=new StringBuilder(s);
System.out.println(s1);
//111
//同样,StringBuilder s1=s也是错误的
}
利用StringBuilder完成字符串拼接
public static void main(String[] args) {
int[] arr= {1,2,3};
StringBuilder s=arrayToString(arr);
System.out.println(s);
}
public static StringBuilder arrayToString(int[] arr) {
StringBuilder s1=new StringBuilder();
s1.append('[');
for(int i=0;i<arr.length;i++)
{
if(i==arr.length-1)
s1.append(arr[i]);
else
{
s1.append(arr[i]);
s1.append(',');
}
}
s1.append(']');
return s1;
//[1,2,3]
}