import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 * 慎用String,會造成大量的垃圾,增加拉垃圾回收器的壓力
 */
import java.util.*;
public class BasicTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        BasicTest test =  new BasicTest();
        test.StringTest();
        System.out.println(isNumber("v0.123a"));
    }

    public void StringTest()
    {
        
        byte[] by = new byte[] {65,66,66,67,68,69};
        
        String string = new String(by);
        System.out.println(string.length());
        char a = string.charAt(1);//用charAt方法需要前面用char类型
        
        
        //String的substring方法,提取字符段
        String sub = string.substring(1);
        System.out.println(sub);
        String subs = string.substring(1, 3);//第2到4个
        System.out.println(subs);
        
        
        //compareTo&compareToIgnore方法,后者忽略大小写
        //前者大于后者返回正值,等于返回0,小于返回负值
        int ab = sub.compareTo(subs);
        System.out.println("两个值相比较的结果是:"+ab);
        
        
        //concat方法,表示字符串连接
        String lianjie = "abc".concat("def").concat("ghi");                 
        System.out.println("连接的结果是:"+lianjie);
        
        
        //append方法,也可以用来连接字符
        
        //用法1:
        StringBuffer buffer = new StringBuffer();
        buffer.append("Json").append(",Zhangxueyou");
        System.out.println(buffer.toString());
        
        //用法2:
        StringBuffer buffera = new StringBuffer().append("JACKzhou").append("Feng");
        System.out.println(buffera.toString());
        /*
         * 关于String,StringBuffer和StringBuilder
         * String类有关键字final修饰,不可继承,不能修改。为不可变值(后两者都是可变值),一旦要改变只能新建一个字符串,速度比StringBuffer和StringBuilder慢
         * StringBuffer类有关键字synchornized修饰,因此是线程安全型,在多线程中,需要多次修改时使用
         * StringBuilder类不是线程安全型,一般在单线程中使用,速度在三者中最快。后两者都继承AbstratStringBuffer
         */
        /*
         * 此外,关于println方法打印的類型:
         * System.out的println 方法: PrintStream.println() 
           PrintStream.println(boolean,char,char[],double,float,int,long)     
           PrintStream.println(java.lang.Object), 
           PrintStream.println(java.lang.String);
                             没有参数类型是Stringbuffer的,所以就用toString()方法轉化為String類型
         */
        
        //IndexOf()查找字符在字符串首次出现的位置
        //LastIndexOf()方法查找末尾首次出现位置
        int weizhi = string.indexOf("a");
        System.out.println(weizhi);
        
        //日期的格式化
        Date today = new Date();
        String aa= String.format(Locale.CHINA,"%tB",today);//tb是2月,tm是月份為兩位數的月份,ta是星期,tY是年份,td是日期值
        System.out.println("今天所屬的月份是:"+aa);//今天所屬的月份是:二月
        String bb= String.format(Locale.CHINA,"%td",today);
        System.out.println("今天所屬的日期是:"+bb);
        
        //判斷輸入的字符串是否為數值
        System.out.println("請輸入字符串");
        //Scanner scann = new Scanner(System.in);
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
        String read = reader.readLine();
        //StringBuffer buffer = scann.next(); 
        //方法1:涉及到正則表達式
        boolean nun = isNum(read);
        if(nun)
            System.out.println("這是數字");
        else System.out.println("這不是數字");
        }catch(IOException e)
        {
            e.printStackTrace();
        }
        //方法2:
    }
    
    
    public static boolean isNum(String str){ 
        return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$"); 
    } 
    public static boolean isNumber(String a)
    {
        //char[] b = a.charAt();
        
        for(int i =0;i<a.length();i++)
        {
            int b = a.charAt(i);
            if(b>=48&b<=57  || b==46)
                return true;
            else return false;
        }
        return false;
    }
    
}