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的字符串及格式化输入输出相关推荐

  1. java判断输入回车符_Java编程:获取用户是否输入回车符

    /** * 验证用户是否有输入回车键,并给出相应提示 * @param flag * @return */ import java.io.BufferedReader; import java.io. ...

  2. java判断输入的格式化_java安全编码指南之:输入校验 - flydean - 博客园

    目录简介 在字符串标准化之后进行校验 注意不可信字符串的格式化 小心使用Runtime.exec() 正则表达式的匹配 简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意 ...

  3. java判断输入的字符串是否为数字

    java判断输入的字符串是否为数字 1. 使用Character.isDight(),利用循环一个个字符判断 Character.isDight(char c) //如果c是数字,返回true,否则返 ...

  4. java 判断输入年份是否为闰年

    java判断输入年份是否为闰年 一,前言 分析: 给定一个年份,判断这一年是不是闰年.当以下情况之一满足时,这一年是闰年: 年份是4的倍数而不是100的倍数: 年份是400的倍数. 其他的年份都不是闰 ...

  5. java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文

    java判断字符串中是否包含中文并过滤掉中文,具体内容如下 1.判断字符串中是否包含中文方法封装 /** * 判断字符串中是否包含中文 * @param str * 待校验字符串 * @return ...

  6. java 判断是否中文字符_java中判断字符串是否是中文的方法

    java中判断字符串是否是中文的方法 发布时间:2020-06-25 14:07:38 来源:亿速云 阅读:79 作者:Leah 本篇文章为大家展示了java判断字符串是否为中文的方法,代码简明扼要并 ...

  7. java 判断是否是昨天_java判断日期是否是今天

    java判断日期是不是当天:public static boolean isToday(String str, String formatStr) throws Exception{ SimpleDa ...

  8. java判断是否为数字(JAVA判断输入是否是数字)

    java如何写一个方法判断传进来的参数是否数字 /** * class名:JudgeIfNumeral * class说明:java如何写一个方法判断传进来的参数是否数字 * @author Jr p ...

  9. java中输入的程序_Java中输入的用法

    Java中输入 1. 读取输入 1)构建一个Scanner,附属到System.in Scanner in = new Scanner(System.in); 此时可以使用Scanner类的各种方法来 ...

最新文章

  1. Spring Boot 实现定时任务的 4 种方式
  2. RDKit:化合物亚结构(Substructure)搜索(基于Python3)
  3. 几十万实例线上系统的抖动问题定位
  4. SAP 电商云 Spartacus UI 修改 Delivery Mode 触发的三个 HTTP 请求
  5. AJAX+json+jquery实现预加载瀑布流布局
  6. 奇安信代码安全实验室帮助微软修复多个高危漏洞,获官方致谢
  7. List集合中数据用set集合去重复,用set集合去重复数据重写了equals还是没成功!
  8. vue 读取ajax数据,详解vue 中使用 AJAX获取数据的方法
  9. MySQL的my.cnf详细配置说明
  10. 沈大海38节jquery强化教程2016视频下载
  11. 管家婆财贸双全TOP系列服务器,管家婆财贸双全II
  12. 基于樽海鞘群算法的WSN节点的部署优化
  13. 计算机虚拟机安装教程,VMware(虚拟机)装Win7系统详细图文教程
  14. python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略
  15. Flash游戏教程:控制物体运动三法
  16. html 验证码功能 不区分大小写进行验证。
  17. win7下的cmd窗口可以全屏显示吗
  18. cvpr2020 matlab_新zwpython 完胜 老matlab 篇二
  19. 微博消息分析-大数据项目
  20. c语言家庭财务管理算法,做好家庭财务管理,离不开这六款工具!

热门文章

  1. 搜索推荐系统根据用户搜索频率(热搜)排序
  2. WM_CTLCOLOR消息
  3. 记录今天学习SQL遇到的一个小问题
  4. vue对象深拷贝_Vue 对数据对象实现深拷贝赋值
  5. ubuntu安装python库_Ubuntu18.04一次性升级Python所有库的方法步骤
  6. python单例类命名_单例模式(java/python/c++)
  7. java byte char io流_吃透Java IO:字节流、字符流、缓冲流
  8. 用python的五种方式_Python模块重载的五种方法
  9. mysql开机启动脚本_centos简单的mysql开机自启和自动保存脚本
  10. 计算机连接网络名称,更改Windows Server Core计算机名字 以及配置网络连接