1.这两种定义有什么区别

/***
* 面试题:这两种定义方式有什么区别?
* 如何证明?
* @param args
*/
public static void main(String[] args) {
String str = "hello";//常量池 String str1 = new String("hello");//在堆里开辟一块新的空间
}

2.String 常用方法

   public static void test(){
String str = "Hello World";//常量的特点是定义了,就不会变,除非重新赋值
int len = str.length();//字符串的长度
boolean eq = str.equals("33333");//判断两个字符的值是不是相等
char charStr = str.charAt(2);//将字符串转换为char类型 boolean contains = str.contains("hello");//判断字符串是否包含这个字符串
boolean startWith = str.startsWith("H");//判断字符串是否以这个字符串开始
boolean endWith = str.endsWith("ddd");//判断字符串是否以这个字符串结尾 boolean empty = str.isEmpty();//判断这个字符串是否为空的字符串,是"",不是null boolean eqIgnore = str.equalsIgnoreCase("HELLO WORLD");//不区分大小写的相等
//rep = Hello java; str = Hello World
//如果没有找到匹配的,则不做替换
String rep = str.replaceAll("World","java");//替换全部的
String rep1 = str.replace("H","e");//替换一个,传值的变量都是char
String rep2 = str.replace("He","eeeee");//替换一个,传值的变量都是char
System.out.println(rep);
System.out.println(str);
System.out.println(rep1);
System.out.println(rep2); String[] strs = str.split(" ");//分割,分割后是变成数组 String sub = str.substring(1,5);//截取,下标是从0开始,1--是开始下标,5--是截止下标
System.out.println(sub); String upStr = str.toUpperCase();//转大写
String lowStr = str.toLowerCase();//转小写
}

3.commons-lang3

dependencies {
compile('org.apache.commons:commons-lang3:3.10')
}

小练习

public class Demo6 {
//练习题:给定一个字符串,判断是否是一个回文(即正反都一样)
//abcdefggfedcba
public static void main(String[] args) {
test1();
} public static void test1(){
String str = "abcdefgfedcba";
String str1 = StringUtils.reverse(str);//将字符串反转
System.out.println("str1 = " + str1);
if (str.equals(str1)){
System.out.println("该字符串时一个回文");
}
}
}

4.StringBuilder和StringBuffer

StringBuffer多了一个synchronized 关键字,线程安全锁

StringBuilder是线程不安全的

StringBuffer是线程安全的

但是一般情况下是在一个方法下使用,使用StringBuilder多点

如果出现多线程调用时,再用StringBuffer

//StringBuilder 的定义
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
//StringBuffer的定义
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
public static void test1(){
String str = "a,b,c,d,e,f,g";
String[] arr = str.split(",");
String res = "";
//这种情况是在不断的创建对象
for (String key:arr){
res += key + "*";
}
System.out.println("res = " + res);
} public static void test2(){
String str = "a,b,c,d,e,f,g";
String[] arr = str.split(",");
//StringBuilder相当于一个容器,不断的往容器里加内容
StringBuilder res = new StringBuilder();
for (String key:arr){
res.append(key).append("*");
}
System.out.println("res = " + res);
} public static void test3(){
String str = "a,b,c,d,e,f,g";
String[] arr = str.split(",");
//StringBuffer多了一个synchronized 关键字,线程安全锁
StringBuffer res = new StringBuffer();
for (String key:arr){
res.append(key).append("*");
}
System.out.println("res = " + res);
}

 

Java003-String字符串的更多相关文章

  1. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  2. [CareerCup] 1.3 Permutation String 字符串的排列

    1.3 Given two strings, write a method to decide if one is a permutation of the other. 这道题给定我们两个字符串,让 ...

  3. 03-Java String字符串详解

    1.Java字符串String A.实例化String字符串:直接赋值(更合理一些,使用较多).使用关键字new. B.String内容的比较 // TODO Auto-generated metho ...

  4. C++学习38 string字符串的增删改查

    C++ 提供的 string 类包含了若干实用的成员函数,大大方便了字符串的增加.删除.更改.查询等操作. 插入字符串 insert() 函数可以在 string 字符串中指定的位置插入另一个字符串, ...

  5. C++学习37 string字符串的访问和拼接

    访问字符串中的字符 string 字符串也可以像字符串数组一样按照下标来访问其中的每一个字符.string 字符串的起始下标仍是从 0 开始.请看下面的代码: #include <iostrea ...

  6. java String字符串——进度1

    String字符串    在JAVA中提供了多种创建字符串对象的方法,这里介绍最简单的两种,    第一种是直接赋值,    第二种是使用String类的构造方法:    如下所示:    Strin ...

  7. 关于String字符串反转

    这是网上看到的一篇java面试题中的问题: 问题是: 如何将一个String字符串反转. String str = "1234567"; int length = str.leng ...

  8. JavaScript的内置对象(Date日期+string字符串)基础语法总结

    1.Date日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 1)定义一个时间对象 : var Udate=new Date(); //注意:使用关键字new,Date()的首 ...

  9. 【转】String字符串相加的问题

    String字符串相加的问题 前几天同事跟我说我之前写的代码中在操作字符串时候,使用字符串相加的方式而不是使用StringBuffer或者StringBuilder导致内存开销很大.这个问题一直在困扰 ...

  10. 从零开始学习前端JAVASCRIPT — 3、JavaScript基础string字符串介绍

    1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 基本数据类型:var sStr = '字符串'; 对象的方法:var oStr = n ...

随机推荐

  1. Django(46)drf序列化类的使用(ModelSerializer)

    前言 我们上篇文章使用到了Serializer类,可能有小伙伴说太过复杂,那么本篇就为大家带来更加简便的序列化类ModelSerializer ModelSerializer 先来看下ModelSer ...

  2. GO学习-(12) Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民 ...

  3. Step By Step(Lua模块与包)

    Step By Step(Lua模块与包) 从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块.从使用者的角度来看,一个模块就是一个程序库,可以通过requi ...

  4. Python+Selenium学习笔记1 - pip命令

    1.用pip命令安装模块 pip install 模块名 e.g. pip install qrcode 2.用pip卸载模块 pip uninstall 模块名 e.g. pip uninstall ...

  5. 『动善时』JMeter基础 — 36、JMeter接口关联【正则表达式提取器】

    目录 1.正则表达式提取器介绍 2.正则表达式提取器界面详解 3.正则表达式提取器的使用 (1)测试计划内包含的元件 (2)请求一界面内容 (3)正则表达式提取器界面内容 (4)请求二界面内容 (5) ...

  6. zk客户端及锁的使用

    1.生成zk客户端对象 private CuratorFramework buildClient() { logger.info("zookeeper registry center ini ...

  7. 视觉SLAM的主要功能模块分析

    视觉SLAM的主要功能模块分析 一.基本概念 SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and L ...

  8. YOLOV4各个创新功能模块技术分析(二)

    YOLOV4各个创新功能模块技术分析(二) 四.数据增强相关-GridMask Data Augmentation 论文名称:GridMask Data Augmentation 论文地址:https ...

  9. nvJPEG Codec库

    nvJPEG Codec库 nvJPEG库是高性能的GPU加速库,用于解码,编码和转码JPEG格式的图像.nvJPEG2000库用于解码JPEG 2000格式的图像.与单CPU解码相比,依赖nvJPE ...

  10. CodeGen结构循环回路

    CodeGen结构循环回路 structure循环是一个模板文件构造,它允许您迭代CodeGen拥有的有关结构的集合.为了使用结构循环,必须同时基于多个存储库结构生成代码. CodeGen可以通过以下 ...