Java 教程 在线

1333Java String 类

1.对整数进行格式化:%[index$][标识][最小宽度]转换方式

格式化字符串由4部分组成,特殊的格式常以%index$开头,index从1开始取值,表示将第index个参数拿进来进行格式化,[最小宽度]的含义也很好理解,就是最终该整数转化的字符串最少包含多少位数字。剩下2个部分的含义:

标识:

  • '-' 在最小宽度内左对齐,不可以与"用0填充"同时使用
  • '#' 只适用于8进制和16进制,8进制时在结果前面增加一个0,16进制时在结果前面增加0x
  • '+' 结果总是包括一个符号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
  • ' ' 正值前加空格,负值前加负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
  • '0' 结果将用零来填充
  • ',' 只适用于10进制,每3位数字之间用","分隔
  • '(' 若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(同'+'具有同样的限制)

转换方式:

d-十进制 o-八进制 x或X-十六进制

上面的说明过于枯燥,我们来看几个具体的例子。需要特别注意的一点是:大部分标识字符可以同时使用。

System.out.println(String.format("%1$,09d", -3123));
System.out.println(String.format("%1$9d", -31));
System.out.println(String.format("%1$-9d", -31));
System.out.println(String.format("%1$(9d", -31));
System.out.println(String.format("%1$#9x", 5689));
//结果为:
//-0003,123
// -31
//-31
// (31)
// 0x1639 

2.对浮点数进行格式化:%[index$][标识][最少宽度][.精度]转换方式

我们可以看到,浮点数的转换多了一个"精度"选项,可以控制小数点后面的位数。

标识:

  • '-' 在最小宽度内左对齐,不可以与"用0填充"同时使用
  • '+' 结果总是包括一个符号
  • ' ' 正值前加空格,负值前加负号
  • '0' 结果将用零来填充
  • ',' 每3位数字之间用","分隔(只适用于fgG的转换)
  • '(' 若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(只适用于eEfgG的转换)

转换方式:

  • 'e', 'E' -- 结果被格式化为用计算机科学记数法表示的十进制数
  • 'f' -- 结果被格式化为十进制普通表示方式
  • 'g', 'G' -- 根据具体情况,自动选择用普通表示方式还是科学计数法方式
  • 'a', 'A' -- 结果被格式化为带有效位数和指数的十六进制浮点数

3.对字符进行格式化:

对字符进行格式化是非常简单的,c表示字符,标识中'-'表示左对齐,其他就没什么了。

1332Java String 类

length() 方法,length 属性和 size() 方法的区别:

  • 1、length() 方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法;
  • 2、length 属性是针对 Java 中的数组来说的,要求数组的长度可以用其 length 属性;
  • 3、Java 中的 size() 方法是针对泛型集合说的, 如果想看这个泛型有多少个元素, 就调用此方法来查看!

这个例子来演示这两个方法和一个属性的用法:

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        String array[] = { "First", "Second", "Third" };
        String a = "HelloWorld";
        List<String> list = new ArrayList<String>();
        list.add(a);
        System.out.println("数组array的长度为" + array.length);
        System.out.println("字符串a的长度为" + a.length());
        System.out.println("list中元素个数为" + list.size());

    }
}

输出的值为:

数组array的长度为3
字符串a的长度为10
list中元素个数为1

1331Java String 类

String 类是不可改变的解析,例如:

String s = "Google";
System.out.println("s = " + s);

s = "facesho";
System.out.println("s = " + s);

输出结果为:

Google
facesho

从结果上看是改变了,但为什么门说String对象是不可变的呢?

原因在于实例中的 s 只是一个 String 对象的引用,并不是对象本身,当执行 s = "facesho"; 创建了一个新的对象 "facesho",而原来的 "Google" 还存在于内存中。

1330Java Character 类

提取字符中的大小写字母:

public class UpperLowerCase {
    public static void main(String []args) {
        String StrA="I am Tom.I am from China.";
        String StrB="";
        String StrC="";
        for(int i=0;i<StrA.length();i++){
            if(Character.isUpperCase(StrA.charAt(i)))
                StrB +=StrA.charAt(i)+"  ";
            if(Character.isLowerCase(StrA.charAt(i)))
                StrC +=StrA.charAt(i)+"  ";
            }
        System.out.println("字符串中大写字母有:"+StrB);
        System.out.println("字符串中小写字母有:"+StrC);
    }
}

输出结果为:

字符串中大写字母有:I  T  I  C  
字符串中小写字母有:a  m  o  m  a  m  f  r  o  m  h  i  n  a  

1329Java Character 类

Character 构造函数自版本 9 以来被弃用。

The constructor Character(char) is deprecated since version 9

原文:java.lang.Character​(char):It is rarely appropriate to use this constructor. The static factoryCharacter.valueOf(char) is generally a better choice, as it is likely to yield significantly better space and time performance.

翻译:它很少被适当的使用这个构造函数。静态工厂Character.valueOf(char)通常是一个更好的选择,因为它可能会产生更好的空间和时间性能。

Character ch = new Character('a');      // Java9 以前
Character ch = Character.valueOf('a');  // Java9 以后