本文介绍java的字符串及其编码转换。

String

基本用法

String是常量字符串,正因为是常量使得String对象可以安全的在变量间分享。

例如:

String a = "hello";
a += " world";	// 相当于把a指向a+“ world”得到的常量字符串
String b = a; 	// 共享a指向的常量字符串

构造函数

Unicode与uft-8, gbk等之间编码转换

Java的String是unicode编码,而网络传输一般是带编码的utf-8,gbk格式的字节流。

String与utf-8的编码转换:

String org = "中国happy";
try {
    // unicode to utf-8
    byte[] bytes = org.getBytes( "utf-8" );
    
    // utf-8 to unicode
    String newString = new String(bytes, "utf-8");
} 
catch (UnsupportedEncodingException e) {
}

如果是转换为gbk编码,只要上面的参数改为”gbk”即可。

常用方法

静态方法

static String format(String format, Object... args)
使用指定的格式字符串和参数返回一个格式化字符串。

static String valueOf(char c) 
static String valueOf(char[] data) 
static String valueOf(char[] data, int offset, int count) 
static String valueOf(double d) 

StringBuffer

线程安全的可变字符序列。

StringBuilder

一个可变的字符序列。

Java字符串的惯用法

使用StringBuilder或StringBuffer

// join(["a", "b", "c"]) -> "a and b and c"
String join(List<String> strs) {
  StringBuilder sb = new StringBuilder();
  boolean first = true;
  for (String s : strs) {
    if (first) first = false;
    else sb.append(" and ");
    sb.append(s);
  }
  return sb.toString();
}

反转字符串

String reverse(String s) {
  return new StringBuilder(s).reverse().toString();
}

Java 字符串拼接“+”号运算符原理

“+”号操作符必须是字符串拼接最常用的一种了,没有之一。使用“+”拼接字符串,其实只是Java提供的一个语法糖。那么,我们就来解一解这个语法糖,看看他的内部原理到底是如何实现的。

例子:

String str1= "hello";
String str2= "world";
String endStr = str1 + " " + str2;

class文件反编译:

String str1 = "hello";
String str2 = "world";
(new StringBuilder()).append(str1).append(" ").append(str2).toString();

通过查看反编译以后的代码,我们可以发现,原来字符串常量在拼接过程中,是将String转成了StringBuilder后,使用其append方法进行处理的。

那么也就是说,Java中的“+”对字符串的拼接,其实现原理是使用StringBuilder.append()方法。

参考:https://zhuanlan.zhihu.com/p/151615108

逗号分隔的字符串和List相互转换

将逗号分隔的字符串转换为List

String str = "a,b,c";  
List<String> result = Arrays.asList(str.split(","));

将List转换为逗号分隔的字符串

1、使用StringUtils工具

List<String> list = new ArrayList<>();  
list.add("a");  
list.add("b");  
list.add("c");  

String str = StringUtils.join(list.toArray(), ",");  

2、使用java8的String.join

String str = String.join(",", Arrays.asList("a", "b", "c"));