现在的位置: 首页 > 综合 > 正文

java String与unicode

2013年09月21日 ⁄ 综合 ⁄ 共 2930字 ⁄ 字号 评论关闭

java Stringunicode

java.nio.charset.Charset

public static Charset defaultCharset()

此方法的作用:返回java虚拟机的默认字符集,默认的字符集取决于操作系统的字符集。

java.lang.String

public byte[] getBytes()

此方法的作用:编码字符串到一个字节流序列,此时采用的编码是平台默认的编码,如果想获得指定编码的字节序列,可用下面这个方法:

public byte[] getBytes(String charsetName)

按照指定编码返回此字符串的编码格式。

证据如下:

 

String str = "";

System.out.println(Integer.toHexString(codePoint));

byte[] bs = str.getBytes();

System.out.println(Charset.defaultCharset());

for (int i=0; i<bs.length; i++) {

    System.out.print(bs[i] + " ");

System.out.println();

6211

GBK

-50 -46

当指定编码为UTF-8时:

6211

GBK

-26 -120 -111

 

当指定为UTF-16时:

-2 -1 98 17

注意此处输出了四个字节,是因为前面两个字节是用来表示字符的编码序列.

public int codePointAt(int index)

返回指定索引处的字符(Unicode 代码点)。该索引引用 char 值(Unicode 代码单元),其范围从 0 length()- 1

注意字符串在内存中是以unicode代码点的方式存储的。

 

public String(byte[] bytes, String charsetName)

    throws UnsupportedEncodingException

构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。新的 String 的长度是一个字符集函数,因此不能等于字节数组的长度。

 

public String[] split(String regex)

根据给定的正则表达式的匹配来拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两因此,结果数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 产生带有下面这些表达式的结果:

Regex

结果

:

{ "boo", "and", "foo" }

o

{ "b", "", ":and:f" }

 

试验证明:

String str = "boo:and:foo";

String[] tr = str.split(":");

for (String s : tr) {

    System.out.println(s);

}

输出结果:

boo

and

foo

 

public String[] split(String regex,

                      int limit)

根据匹配给定的正则表达式来拆分此字符串

limit影响字符数组的长度;最大不能超过limit

试验证明:

String str = "boo:and:foo";

String[] tr = str.split(":", 2);

    for (String s : tr) {

       System.out.println(s);

    }

输出结果:

boo

and:foo

即字符串数组的最大长度为2   

 

经验分享:

1、分隔符为“.(无输出),|(不能得到正确结果)转义字符时,*,+”时出错抛出异常,都必须在前面加必须得加"//",split(//|);

2、如果用"/"作为分隔,就得写成这样:String.split("////"),因为在Java中是用"//"来表示"/",字符串得写成这样:String Str="a//b//c";

 转义字符,必须得加"//";

3、如果在一个字符串中有多个分隔符,可以用"|"作为连字符,比如:String str="Java string-split#test",可以用Str.split(" |-|#")把每个字符串分开;

试验证明:

String str="Java str//in.g-split#test";

String[] t = str.split(" |-|#|////|//.");

for (String temp : t) {

       System.out.println(temp);

}

输出结果:

Java

str

in

g

split

test

 

public String replace(char oldChar,
                      char newChar)

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。

如果 oldChar 在此 String 对象表示的字符序列中没有出现,则返回对此 String 对象的引用。否则,创建一个新的 String 对象,用来表示与此 String 对象表示的字符序列相等的字符序列,除了每个出现的 oldChar 都被一个 newChar 替换之外。

示例:

"mesquite in your cellar".replace('e', 'o')
         returns "mosquito in your collar"
 "the war of baronets".replace('r', 'y')
         returns "the way of bayonets"
 "sparring with a purple porpoise".replace('p', 't')
         returns "starring with a turtle tortoise"
 "JonL".replace('q', 'x') returns "JonL" (no change)
 
试验证明:
 

String str = "tst";

String str2 = str.replace('y', 'z');

System.out.println(str == str2);

输出结果:

true

当有字符被替换掉时:

String str = "tst";

String str2 = str.replace('t', 'z');

System.out.println(str == str2);

输出结果:

false

 

replaceAll

public String replaceAll(String regex,
                         String replacement)

使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。

 

试验证明:

String str = "tst";

String str2 = str.replaceAll("ts", "y");

System.out.println(str2);

输出结果:

yt

 

indexOf

public int indexOf(String str)

返回第一次出现的指定子字符串在此字符串中的索引。返回的整数是

试验证明:

String str = "tstdddwz";

System.out.println(str.indexOf("wz"));

输出结果

6

注意此时下标是从0开始的。

抱歉!评论已关闭.