java判断输入的格式化_Java的字符串及格式化输入输出
Java的字符串及格式化輸入輸出
1.String的不可變
在淺析Java的jvm上的內存位置的分配里已經說明,String使用了常量池技術,所以在棧中的應用要么是指向常量池,要么是指向堆,String是一個常量類,不可以被繼承。
String? str1=”hello”;//指向常量池
String? str2=new? String(”hello”);//指向堆
2.String的”+”號原理如下
String str1 = "str1" + "--str2";
// 相當于如下
StringBuilder builder = new StringBuilder();
builder.append("str1").append("--str2").toString();/*假如想進一步分析可以看匯編class文件*/
備注:String的加號的缺陷是對其進行改變等同于每次生成了一個新的 StringBuilder對象,這樣就會導致無用的實例較多導致GC開始工作,影響工作效率。
public classStringDemo1 {public static voidmain(String[] args) {
String str="";
String [] fields={"1","2"};for (int i = 0; i < args.length; i++) {//每次都需要創建StringBuilder 從而降低了效率
str+=fields[i];
}
StringBuilder builder= newStringBuilder();for (int i = 0; i < args.length; i++) {//效率比上述要高,減少了每次StringBuilder的創建
builder.append(fields[i]);
}
}
}
3.string的==號
string的==號比較的是引用地址;//可以看class文件
System.out.println(new String ("abc")==new String("abc"));//false;
System.out.println(new String ("abc")=="abc");//false
System.out.println("abc"=="abc");//true
4.string的isempty
比較的是內容長度是否為0;//可以看源碼
String str=null;
System.out.println(str.isEmpty());//運行時錯誤
System.out.println("".length());//0
System.out.println("".isEmpty());//true
5.String的equals
比較的是內容是不是相同;//可以看源碼
System.out.println(new String ("abc").equals(new String("abc")));//true
6.Stringbuffer
StringBuffer線程安全的可變字符序列,主要使用的方法是append以及insert,保證線程安全主要有兩種方式(暫且不論)
7.Stringbuilde線程是不安全的,主要使用的方法同stringbuffer,效率高于stringbuffer
8.格式化輸出(實現國際化等)
%s? 字符串?? %d整數? %f 浮點型小數? %% 百分比類型 %tx日期與時間類型(x代表不同的日期與時間轉換符) < 格式化前一個轉換符所描述的參數 ("%f和%<3.2f", 99.45) 99.450000和99.45? $ 被格式化的參數索引? 等
轉換符:c包括全部日期和時間信息? F “年-月-日”格式?? D “月/日/年”格式
r? “HH:MM:SS PM”格式(12時制)T “HH:MM:SS”格式(24時制)
R “HH:MM”格式(24時制)等
//上述格式可以具體的區查看java.util.Formatter類
9.實例
實例1(實現國際化)
文件1:i18n_en_US.properties
name=name
age=age
文件2:i18n_zh_CN.properties
name=\u540D\u79F0
age=\u5E74\u9F84
文件3:login.txt
張三,18
李四,24
代碼
ResourceBundle bundle = ResourceBundle.getBundle("i18n", Locale.US);
String name = bundle.getString("name");
String age = bundle.getString("age");
String filePath = "F:\\eclipse\\eclipse\\StringTest\\src\\login.txt";
try {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(new File(filePath));
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] infoSplit = line.split(",");
String info = String.format("%s:%s\t%s:%s", name,infoSplit[0], age,infoSplit[1]);????????????????????? ?? System.out.println(info);
/*當然也可以System.out.format的方式輸出,上述也可以 用 DateFormat, MessageFormat, NumberFormat去做,大同小異。*/
}
} catch (FileNotFoundException e) {
throw new Exception(filePath + "路徑不存在!");
}
實例二(實現日期的格式化)
Date date = new? Date();
System.out.format("%1$tF?? %1$tT",date);
正則
判斷是否匹配給定的正則表達式用于驗證matches(String regex)
System.out.println("123abc".matches("\\d+[a-zA-Z]+"));
//具體查看java.util.regex.Pattern。
替換所有的相應的字符replaceAll(String regex, String replacement)
System.out.println("i? love? you? i love you ".replaceAll("love", "sick"));
// replaceFirst(String regex, String replacement) 替換第一個
截取需要的內容
String? str= "12344567890jk1234567890111fgf123456";
Pattern compile = Pattern.compile("\\d{11,}");
Matcher matcher = compile.matcher(str);
while(matcher.find()) {
String group = matcher.group();
if(group.length()==11) {
System.out.println(group);
}
}
//matcher相應的還有start? end方法,匹配開始和結束的位置,lookat從開始位置找(這也是與find的區別)等
改變類默認的輸出方式
可以通過改變tostring方法來實現
總結
以上是生活随笔為你收集整理的java判断输入的格式化_Java的字符串及格式化输入输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实现doc向swf格式的转换 转
- 下一篇: java数据传递给安卓_Android数