Aotle

你所看到的惊鸿,都曾被平庸磨练

Java方法记录

Array和List相互转化

Arrays.asList把数组转化成List

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Arrays;
/**
把数组转化成list
注意asList 方法的参数必须是对象或者对象数组,而原生数据类型不是对象
转化int 数组需要变成Integer
返回一个由指定数组生成的**固定大小**的 List。
*/
String[] myArray = { "Apple", "Banana", "Orange" };
List<String> myList = Arrays.asList(myArray);
List<String> myList = Arrays.asList("Apple", "Orange");
Integer[] myArray = { 1, 2, 3 };
List<Integer> myList = Arrays.asList(myArray);
//得到可以修改大小的ArrayList
String[] myArray = { "Apple", "Banana", "Orange" };
List<String> myList = new ArrayList<String>(Arrays.asList(myArray));

ArrayList.toArray(T[] arr) 把list转化成数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 方法一:
* Type[] l = new Type[<total size>];
* list.toArray(l);
*/
Integer[] arr = new Integer[list.size()];
list.toArray(a);

/**
* 方法二:
* Type[] l = (Long []) list.toArray(new Type[0]);
*/
arr = list.toArray(new Integer[0]);

/**
* 方法三:
* a = list.toArray((Type[]) new Object[list.size()]);
*/
arr = list.toArray((Integer[]) new Object[list.size()]);

Optional判断Object是否为空

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/******************************************************************************/
import java.util.Optional<T>;
Optional<String> emptyOpt = Optional.empty();//初始化为空
Optional<String> notNullOpt = Optional.of(str);//初始化不为空
Optional<String> nullableOpt = Optional.ofNullable(str);//初始化可以为空
emptyOpt.isPresent();//如果为空返回false,不为空返回true。
/**
orElse():如果有值就返回,否则返回一个给定的值作为默认值;
orElseGet():与orElse()方法作用类似,区别在于生成默认值的方式不同。该方法接受一个Supplier<? extends T>函数式接口参数,用于生成默认值;
orElseThrow():与前面介绍的get()方法类似,当值为null时调用这两个方法都会抛出NullPointerException异常,区别在于该方法可以指定抛出的异常类型。
*/
String str = "Hello World";
Optional<String> strOpt = Optional.of(str);
String orElseResult = strOpt.orElse("Hello Shanghai");
String orElseGet = strOpt.orElseGet(() -> "Hello Shanghai");
String orElseThrow = strOpt.orElseThrow(
() -> new IllegalArgumentException("Argument 'str' cannot be null or blank."));
/*
在下面的代码中,如果filter()方法中的Lambda表达式成立,filter()方法会返回当前Optional对象值,否则,返回一个值为空的Optional对象。
*/
Optional<String> optional = Optional.of("lw900925@163.com");
optional = optional.filter(str -> str.contains("164"));

上面提到创建Optional对象有三个方法,empty()方法比较简单,没什么特别要说明的。主要是of()ofNullable()方法。当你很确定一个对象不可能为null的时候,应该使用of()方法,否则,尽可能使用ofNullable()方法,比如:

1
2
3
4
5
6
7
8
public static void method(Role role) {
// 当Optional的值通过常量获得或者通过关键字new初始化,可以直接使用of()方法
Optional<String> strOpt = Optional.of("Hello World");
Optional<User> userOpt = Optional.of(new User());

// 方法参数中role值不确定是否为null,使用ofNullable()方法创建
Optional<Role> roleOpt = Optional.ofNullable(role);
}

orElse()方法的使用

1
return str != null ? str : "Hello World"

上面的代码表示判断字符串str是否为空,不为空就返回,否则,返回一个常量。使用Optional类可以表示为:

1
return strOpt.orElse("Hello World")

简化if-else

1
2
3
4
5
6
7
8
9
10
11
User user = ...
if (user != null) {
String userName = user.getUserName();
if (userName != null) {
return userName.toUpperCase();
} else {
return null;
}
} else {
return null;
}

上面的代码可以简化成:

1
2
3
4
5
6
User user = ...
Optional<User> userOpt = Optional.ofNullable(user);

return userOpt.map(User::getUserName)
.map(String::toUpperCase)
.orElse(null);

String

trim() 删除头尾空格

1
2
3
4
5
6
String Str = new String("    www.runoob.com    ");
System.out.print("原始值 :" );
System.out.println( Str );

System.out.print("删除头尾空白 :" );
System.out.println( Str.trim() );

split() 根据正则表达式拆分字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public String[] split(String regex, int limit);
/**
regex -- 正则表达式分隔符。
limit -- 分割的份数。
返回字符串数组
*/
String str = new String("Welcome-to-Runoob");
System.out.println("- 分隔符返回值 :" );
for (String retval: str.split("-")){
System.out.println(retval);
}
System.out.println("");
System.out.println("- 分隔符设置分割份数返回值 :" );
for (String retval: str.split("-", 2)){
System.out.println(retval);
}
System.out.println("");
String str2 = new String("www.runoob.com");
System.out.println("转义字符返回值 :" );
for (String retval: str2.split("\\.", 3)){
System.out.println(retval);
}
System.out.println("");
String str3 = new String("acount=? and uu =? or n=?");
System.out.println("多个分隔符返回值 :" );
for (String retval: str3.split("and|or")){
System.out.println(retval);
}

public char[] toCharArray() 转化成char数组

1
2
3
4
5
6
7
public class Test {
public static void main(String args[]) {
String Str = new String("www.runoob.com");
System.out.print("返回值 :" );
System.out.println( Str.toCharArray() );
}
}

indexOf() 查找指定字符串在字符串的下标

indexOf() 方法有以下四种形式:

  • public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

  • public int indexOf(int ch, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

  • int indexOf(String str): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

  • int indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    String string = "aaa456ac";  
    //查找指定字符是在字符串中的下标。在则返回所在字符串下标;不在则返回-1.
    System.out.println(string.indexOf("b")); // indexOf(String str); 返回结果:-1,"b"不存在

    // 从第四个字符位置开始往后继续查找,包含当前位置
    System.out.println(string.indexOf("a",3));//indexOf(String str, int fromIndex); 返回结果:6

    //(与之前的差别:上面的参数是 String 类型,下面的参数是 int 类型)参考数据:a-97,b-98,c-99

    // 从头开始查找是否存在指定的字符
    System.out.println(string.indexOf(99));//indexOf(int ch);返回结果:7
    System.out.println(string.indexOf('c'));//indexOf(int ch);返回结果:7

    //从fromIndex查找ch,这个是字符型变量,不是字符串。字符a对应的数字就是97。
    System.out.println(string.indexOf(97,3));//indexOf(int ch, int fromIndex); 返回结果:6
    System.out.println(string.indexOf('a',3));//indexOf(int ch, int fromIndex); 返回结果:6

    String Str = new String("菜鸟教程:www.runoob.com");
    String SubStr1 = new String("runoob");
    String SubStr2 = new String("com");
    System.out.print("查找字符 o 第一次出现的位置 :" );
    System.out.println(Str.indexOf( 'o' ));
    System.out.print("从第14个位置查找字符 o 第一次出现的位置 :" );
    System.out.println(Str.indexOf( 'o', 14 ));
    System.out.print("子字符串 SubStr1 第一次出现的位置:" );
    System.out.println( Str.indexOf( SubStr1 ));
    System.out.print("从第十五个位置开始搜索子字符串 SubStr1 第一次出现的位置 :" );
    System.out.println( Str.indexOf( SubStr1, 15 ));
    System.out.print("子字符串 SubStr2 第一次出现的位置 :" );
    System.out.println(Str.indexOf( SubStr2 ));

valueOf() 把基本数据类型转化成String

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int i = 10; 
String str = String.valueOf(i);
valueOf(boolean b)//: 返回 boolean 参数的字符串表示形式。.

valueOf(char c)//: 返回 char 参数的字符串表示形式。

valueOf(char[] data)//: 返回 char 数组参数的字符串表示形式。

valueOf(char[] data, int offset, int count)//: 返回 char 数组参数的特定子数组的字符串表示形式。

valueOf(double d)//: 返回 double 参数的字符串表示形式。

valueOf(float f)//: 返回 float 参数的字符串表示形式。

valueOf(int i)//: 返回 int 参数的字符串表示形式。

valueOf(long l)//: 返回 long 参数的字符串表示形式。

valueOf(Object obj)//: 返回 Object 参数的字符串表示形式。
//补充 把String转化成数字
//大多需要使用基本数据型态的包装类别
//比如说 String 转换成 byte
//可以使用 Byte.parseByte(String s)
//这一类的方法如果无法将 s 分析 则会丢出 NumberFormatException
//byte :
Byte.parseByte(String s) : 将 s 转换成 byte
Byte.parseByte(String s, int radix) : 以 radix 为基底 将 s 转换为 byte
//比如说 Byte.parseByte("11", 16) 会得到 17 ,radix是多少进制
//double :
Double.parseDouble(String s) //将 s 转换成 double
//float :
Double.parseFloat(String s) //将 s 转换成 float
//int :
Integer.parseInt(String s) //将 s 转换成 int
//long :
Long.parseLong(String s)

toUpperCase() toLowerCase()

这两个方法只对英文字母有效,对其余字符无影响。

转换成大写,转换成小写

charAt()

取索引处的字符

StringBuffer StringBulider

1
sb.append()

System

System.arraycopy

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src:源数组;

srcPos:源数组要复制的起始位置;

dest:目的数组;

destPos:目的数组放置的起始位置;

length:复制的长度.

Integer.toBinaryString

把整数转化成二进制字符串

评论