3.4补

3.4 java基础总结①常用类String②Stringbuffer③Stringbuilder

①常用类String②正则表达式③Stringbuffer④Stringbuilder

一、String
①String内存分析
String str0 = "hello";预先放到数据段的常量池
String str1 = "hello";常量池里边已有,引用直接指向它
String str2 = new String("hello");堆中,新的
String str3 = new String("hello");堆中,新的

str3 = str2 ×,=比较的是引用,不相等,String重写的equals方法比较的是内容,相等

str3 = str2;str2 = "world";
System.out.println("str3");结果为hello,没有变,只是str2的引用指向了world而已,str3的引用还是指向hello

String的内容是不可变的,不管是常量池的对象,还是堆中的对象

+ 字符串链接符

②String的基础方法
-equalsIgnoreCase("str"); 忽略大小写比较
-compareTo 字符串按字典顺序比较,依次比较第一个不同字母的ASCII,方式是相减,如果都相同在用长度相减。
-length()
-charAt() 取出某个位置的char值,所以是char字符,作比较的时候是ASCII,所以在作比较的时候,一定要用‘0‘,‘a‘比较,或者是ASCII
-tocharArray();-getBytes()
-indexOf("e",0); 首次出现的下标,不写默认从开始
-lastIndexOf();
-toUpperCase(); 全大写,可以指定位置
-toLowerCase(); 全小写
-startWith("he"); 判断开头
-endWith("he")
-contains("he"); 包含子字符串
-concat("he"); +在结尾,元字符串没变,如果要新的需要接收
-substring(1,3); 截取子字符串,前闭后开,
-substring(1); 截取1到最后
-replace("L","you") 替换,也可以是字符

③String的强力方法
-trim(); 去掉字符串前后空格,用在接收用户输入 input.trim().equals();
-split(); 根据正则表达式拆分;

String birthday = "1990-1-1";
String[] results = birthday.split("-");
分隔符前边没有东西,会有一个空串,最后一个分隔符没有东西,不会返回空串
字符串 "boo:and:foo" 使用这些参数可生成以下结果:

Regex Limit 结果 
: 2 { "boo", "and:foo" } 
: 5 { "boo", "and", "foo" } 
: -2 { "boo", "and", "foo" } 
o 5 { "b", "", ":and:f", "", "" } 
o -2 { "b", "", ":and:f", "", "" } 
o 0 { "b", "", ":and:f" }

字符串为空和空串不一样
空串:String str = ""; 引用指向""
为空:String str = null; 引用为空

判断字符串非空:
if(str != null && str.trim().eauals(""))

二、正则表达式 regex 字符串模板
正则表达式本身是个字符串
①[【】表示一个字符
[0-9][\d] 都表示一个数字
[abc] 表示a、b、c
[a-zA-z0-9] 表示字母或数字

[abc] a、b 或 c(简单类) 
[^abc] 任何字符,除了 a、b 或 c(否定) 
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

String regex = "0830[0-9]{7}"
if(input.matches(regex)){}

②{} 表示前边出现的次数
{m,n} 最少m次,最多n次
{m,} 最少m次,最多不限
{m} 只能m次

* 任意次 a[0-9]* a√
+ 至少一次 a× a0√
? 0-1次

?. 要用这些本身,用转义,\\? \\. 如果在字符串中有?.虽然可以直接用,但是不准确,因为尤其特殊含义

③(|) 或,分组,满足一个即可
(abc|12|k[65]?)
regex = "0830([0-9]{4}|110|120|119)";

三、StringBuffer
①不能直接用 = 赋值 调用构造new StringBuffer(String str)
②不能用+链接字符 -append
③内容可变,大量的String累加,用StringBuffer
④线程安全,效率低,(一定)(执行,使用效率)

如果线程不安全,效率高,速度快(StringBuilder)

方法:
-append
-insert(int,"he") 插入,在offset处插入
-delete(int start,end) 删除,前闭后开
-charAt
-length
-indexof(String,from index)
-setCharAt()
-repalce(start,end,str)
-reverse 反转
-toString

四、StringBuilder
兼容StringBuffer API
不保证线程同步,线程不安全,效率快

所以一般不需要线程安全的时候,普通的字符串大量操作都用StringBuilder

时间: 2024-08-01 10:43:51

3.4补的相关文章

昨天没写今天补上

恩因为今天要考试所以昨天晚上在复习,没来得及写,现在补上. 昨天依旧是循环,被虐了整整一天! 到现在仍然不知道for里的循环体怎么写.... 感到人生无望...(不想说什么了粘题吧) p1032;#include〈iostream〉 using namespace std; int main () { long long a,b=0,c,d,sum=0; cin>>a; while (a>0) { d=a/10; sum++; for(int i=1;i<=sum;i++) { c

python tab补全

让python的交互解释器支持tab补全.提示功能 方法1: 一.执行python脚本 1.创建一个python脚本,以.py结尾: 脚本如下: import sys import readline import rlcompleter import atexit import os readline.parse_and_bind('tab:complete') histfile =os.path.join(os.environ['HOME'], '.pythonhistory') try: r

补零与离散傅里叶变换的分辨率

离散傅里叶变换(DFT)的输入是一组离散的值,输出同样是一组离散的值.在输入信号而言,相邻两个采样点的间隔为采样时间Ts.在输出信号而言,相邻两个采样点的间隔为频率分辨率fs/N,其中fs为采样频率,其大小等于1/Ts,N为输入信号的采样点数.这也就是说,DFT的频域分辨率不仅与采样频率有关,也与信号的采样点数有关.那么,如果保持输入信号长度不变,但却对输入信号进行补零,增加DFT的点数,此时的分辨率是变还是不变? 答案是此时分辨率不变.从时域来看,假定要把频率相差很小的两个信号区分开来,直观上

Elasticsearch in java 范例:自动补齐功能(completion suggester)

ES(elasticsearch)的suggester共有四类(term suggester, phrase suggester, completion suggester, context suggester), 其中completion suggester作为搜索框中的自动补齐功能,尤为常用. 本文将用java语言实现一个简单例子来叙述如何使用completion suggester. 例子的主要功能是为股票的名称和编号建立自动补齐功能. 实现一个完整的completion suggeste

linux下的python如何使用tab键补全

一.vim下的补全: pydiction插件 实现功能: 简单python关键词补全 python 函数补全带括号 python 模块补全 python 模块内函数,变量补全 安装步骤: cd ~ wget https://github.com/rkulla/pydiction/archive/master.zip unzip master.zip mkdir -pv ~/.vim/tools/pydiction cp -r pydiction-master/after ~/.vim cp py

code M资格赛 补题

A: 音乐研究 时间限制:1秒 空间限制:32768K 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分. 具体地说,就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 difference 最小.两段等长音频的 difference 定义为:difference = SUM(a[i] - b[i])2 (1 ≤ i ≤ n),其中SUM()表示求和 其中 n 表示序列

VIM的自动补全

自动补全可以很好的提高输入的效率: 触发自动补全的方法总结: 可供弹出式菜单的使用的命令: 其它再补充:

Linux Vim中自动补全Python插件:Pydiction

Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. python_pydiction.vim  -- Vim plugin that autocompletes Python code. complete-dict         -- Dictionary file of Python keywords, modules, etc. pydiction.p

TensorFlow实现基于深度学习的图像补全

目录 ■ 简介 ■ 第一步:将图像理解为一个概率分布的样本 你是怎样补全缺失信息的呢? 但是怎样着手统计呢?这些都是图像啊. 那么我们怎样补全图像?  ■ 第二步:快速生成假图像 在未知概率分布情况下,学习生成新样本 [ML-Heavy] 生成对抗网络(Generative Adversarial Net, GAN) 的架构 使用G(z)生成伪图像 [ML-Heavy] 训练DCGAN 现有的GAN和DCGAN实现 [ML-Heavy] 在Tensorflow上构建DCGANs 在图片集上跑DC

Ubuntu 16.04.2 LTS 安装python vim自动补全工具pydiction

Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. 下载Pydiction mkdir ~/.vim mkidr ~/.vim/tools cd ~/.vim/tools #可以先下载好放到Ubuntu系统中 git clone https://github.com/rkulla/pydiction.git 配置Pydiction #- UNIX/LINUX/OSX: Put python_pydiction.vim in ~/.vim/after