第一章 String & StringBuilder
String类用类final修饰,不能被继承,String字符串被创建后永远无法被改变,但字符串引用可以重新赋值,改变引用的指向
java字符串中任何一个字符对应16位(2个字节)的定长Unicode编码;

java为了提高性能,静态字符串(字面量、常量、常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在则返回该对象;
*str.length();获取字符串中的字符的个数;
*int str.indexOF(String str)//在字符串中检测str第一次出现的位置,返回int型下标值,找不到返回-1值
*int indexOf(String str,int fromIndex)//从字符串的fromIndex位置开始检索str第一次出现的位置,返回下标
*int lastIndexOf(String str,int from)//str在字符串中最后一次出现的位置
面试题:
String str ="java,我爱java,我热爱java,我非常热爱java";
//问:子字符串java出现的次数

int index=0;//java出现的下标
int count=0;//java出现的次数
while((index=str.indexOf("java",index))!=-1){
System.out.println("index="+index);
count++;
index+="java".length();
}
System.out.println(count);

*String substring(int beginIndex)//截取从指定下标开始到字符串结尾结束的子字符串,返回值为String类型
*String substring(int beginIndex,int endIndex);//截取从指定下标开始到指定下标结束的子字符串,返回值为String类型
(java中很多方法经常出现两个临界值,通常都是包头不包尾)
【例】
//截取第一个逗号到最后一个逗号之间的字符串

int beginIndex=str.indexOf(",");
int endIndex=str.lastIndexOf(",");
String sub = str.substring(beginIndex+1, endIndex);
System.out.println(sub);

注意:java字符串中:中文输入法的","和英文输入法的","是不同的,写串了可导致查询结果为-1(即查询不到)

*str.trim();//去掉字符串str开头和结尾处的空白字符格

*char charAt(int index);//返回指定下标处的char字符

*str.startsWith(String prefix);//判断str字符串是否以指定前缀prefix开头,返回boolean型判断结果

*str.endsWith(String suffix);//判断str字符串是否以指定后缀suffix结尾,返回boolean型判断结果

StringBuilder字符串生成器
StringBuilder sub = new StringBuilder();//初始可放16个字符
* .append(String str);用于实现大量字符串拼接
* .insert(int offset,String str),在指定位置插入指定内容
* .delete(int start,int end);删除指定位置开始到指定位置结束之间的字符串
* .reverse(String str);完成字符串的反转

-------------------------------------------------------------------------------
第二章 Regex正则表达式 & Object类 & 包装类

RegularExpression正则表达式
定义:一串特定字符组成的“规则字符串”,用于描述/记录文本规则。
意义:方便实现对字符串进行匹配、查找、替换等复杂操作。

1)字符集合:
[abc] :a,b,c中的任何一个
[^abc] :除了a,b,c的任意字符
[a-z] :a到z中的任意一个字符
[a-zA-Z0-9] :a到zA到Z0~9中任意一个字符
[a-z&&[^bc]]:a到z除了b和c以外的任意一个字符,&&表示与的关系;

2)预定义字符集
. :任意一个字符
\d :任意一个数字字符,相当于[0-9];
\D :非数字字符,相当于[^0-9];
\w :单词字符,相当于[a-zA-Z_0-9];
\W :非单词字符
\s :空白字符
\S :非空白字符

3)数量词
X? :表示0个或1个
X* :表示0个或任意多个
X+ :表示1到任意多个
X{n} :表示n个X
X{n,m} :表示n到m个X

4)分组(),将一系列正则表达式看作一个整体,可以使用|表示或的关系
\字符转义
^ $ :边界匹配,^变是字符串开始,$表示字符串结束

String正则API

1)str.matches(regex):
将一个字符串与正则表达式进行匹配,匹配成功返回true,否则返回false
* 用户输入一个字符串,对此字符串进行校验
* 必须满足第一个字符是abc的任意一个字符
* 第二个字符是任意数字

Scanner sc=new Scanner(System.in);
boolean flag;
do {
System.out.println("请输入用户名,以a/b/c开头,包含数字");
String str =sc.next();
String regex="[abc][0-9]{2,8}";
flag = str.matches(regex);
if(flag==false) {System.out.println("输入错误,请重新输入:")
}else {System.out.println("正确:");}
}while(flag==false);

str.matches(regex)默认自带^$,在匹配时一定是String.matches(regex)

判断email格式是否合法:
String regex1 ="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4}$";

2)str.split(String regex);返回值为字符串数组
String [] s = email.split("[_@\\.]");
System.out.println(Arrays.toString(s));
//[mr, w123, baidu, com, cn]

3)replaceAll(String regex,String replacement)
//将字符串中符合正则表达式regex规则的字符串替换成replacement
String s2="中国,没有国中之国";
String s3=s2.replaceAll("中国","*");
System.out.println(s3);
//*,没有国中之国

Object(鼻祖类)
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类默认为:java.lang.Object类
Object类型的引用变量可以指向任何类型对象。

1)toString()重写
* Object类中的toString()默认返回一个对象的字符串表示,
* 而这个字符串在实际开始中没有什么具体意义,通常强烈建议
* 在子类中重写toString()使其具有具体的意义
* 重写规则:通常此方法将对象的属性值作为字符串返回
/*
* 在内存中,point是引用,保存的对象的地址值
* 打印输出引用时会调用该类的toString(),如果该类没有
* 那么,调用父类中的toString()
* Object类中的toString()作用:返回一个表示该对象的字符串
* 字符串形式:类名@散列码(十六进制的整数)
* 散列码是根据地址值经过算法计算得出的一个整数
*/
Point point = new Point(10, 20);
System.out.println(point); //此对象表示的点的坐标

2)equals()重写
* Object类中的equals()方法作用等同于==
* 用于比较两个引用是否指向同一个对象
* 在实际开发中,通常建议根据实际业务重写equals方法,使得
* 对象之间的比较更具有实际意义。
* javaAPI中的很多类已经重写了equals(),如String

包装类
在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本类型转换为对象;
所有基本类型都有一个与之相对应的类,即包装类(wrapper)
包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值
包装类是final的,不能定义他们的子类
Number抽象类,是Byte,Double,Float,Integer,Long,Short类的父类;
Number的子类必须提供方法(将表示的数值转换为byte,double,float,int,long,short等基本类型)
intValue() 以int形式返回指定的数值
doubleValue() 以double形式返回指定的数值
floatValue() 以float形式返回指定的数值
Number n = 123;
Number m=123.45;
int a =n.intValue();//a=123;
double d =n.doubleValue();//d=123.0

int a1 =m.intValue();//a1=123;
double d1 =m.doubleValue();//d1=123.45;

1)Integer常用功能:
表示常量:
static int MAX_VALUE值为2的31次方减1;表示int类型能表示的最大值
static int MIN_VALUE值为-2的31次方;表示int类型能表示的最小值
2)Integer静态方法parseInt:用于将字符串传为int

Integer i =new Integer(3);//将3转换为对象i
double d=i.doubleValue();//将对象中的值用于计算,
System.out.println(d);//3.0
Double d1 =Double.valueOf(d);//将数字表示的值用于面向对象开发

/*
* parseInt(String),将String转换为int类型
* 转换的前提是该String类型的值一定是整数类型
* 否则失败,抛出异常
*/

String str ="123";
int s1=Integer.parseInt(str);
System.out.println(s1+4);//123+4=127
str="a123";
//s1=Integer.parseInt(str);
System.out.println(s1);//NumberFormatException数字格式异常

API和正则表达式的更多相关文章

  1. 详解Java API之正则表达式

    正则表达式描述的是一种规则,符合这种限定规则的字符串我们认为它某种满足条件的,是我们所需的.在正则表达式中,主要有两种字符,一种描述的是普通的字符,另一种描述的是元字符.其中元字符是整个正则表达式的核 ...

  2. Java基础学习笔记十三 常用API之正则表达式、Date、DateFormat、Calendar

    正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ...

  3. Java API 之 正则表达式

    一.基本概念 在项目中我们经常性做的一件事是“匹配”字符串 比如: 1.我们要验证用户输入的手机号是否合法? 2.验证设置的密码是否符合规则? 3.或者替换指定字符串中的一些内容. 这么一看,似乎正则 ...

  4. 常用API(正则表达式、Date、DateFormat、Calendar)

    常用API 今日内容介绍 u 正则表达式 u Date u DateFormat u Calendar 第1章 正则表达式 1.1 正则表达式的概念 正则表达式(英语:Regular Expressi ...

  5. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  6. java正则表达式语法详解及其使用代码实例

    原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...

  7. Java开发知识之Java的正则表达式

    目录 正则表达式 一丶什么是正则表达式 1.正则表达式简介 2.无正则表达式判断代码 3.使用正则表达式代码. 二丶正则表达式API 三丶正则表达式语法格式 1.正则表达式语法 正则表达式 一丶什么是 ...

  8. Java编程的逻辑 (89) - 正则表达式 (中)

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  9. Java 正则表达式(精华)

    英文:Jakob Jenkov译文:严亮链接:ifeve.com/java-regex/ Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达 ...

随机推荐

  1. Java 8新增的Lambda表达式

    一. 表达式入门 Lambda表达式支持将代码块作为方法参数,lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例,相当于一个匿名的方法. 1.1 La ...

  2. TFS二次开发08——分支(Branch)和合并(Merge)

    一:创建分支   private static void BranchFile(Workspace workspace, String newFilename) { String branchedFi ...

  3. 分布式存储中HDFS与Ceph两者的区别是什么,各有什么优势?

    过去两年,我的主要工作都在Hadoop这个技术栈中,而最近有幸接触到了Ceph.我觉得这是一件很幸运的事,让我有机会体验另一种大型分布式存储解决方案,可以对比出HDFS与Ceph这两种几乎完全不同的存 ...

  4. 2.5BatchNormalzation

    BatchNormalzation是一种解决深度神经网络层数太多,而没有办法有效前向传递的问题,因为每层的输出值都会有不同的均值和方差,所以输出数据的分布也不一样. 如果对于输入的X*W本身得到的值通 ...

  5. SequenceFile实例操作

    HDFS API提供了一种二进制文件支持,直接将<key,value>对序列化到文件中,该文件格式是不能直接查看的,可以通过hadoop  dfs -text命令查看,后面跟上Sequen ...

  6. 51nod 1432 - 独木舟 - [贪心]

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1432 基准时间限制:1 秒 空间限制:131072 KB   ...

  7. Mac操作技巧

    Command+Option+P+R,重置PRAM的. 官方关于重置PRAM的说明.(有助于电脑提速) 安装新版系统的时候失败,原因是下载的镜像有问题版本不对,具体是中国区暂未更新镜像,下载下来的有问 ...

  8. cordova-ios 升级到4.4.0 无法真机跑iOS8 报错: dyld`dyld_fatal_error: -> 0x120085088 <+0>: brk #0x3

    项目进入测试阶段,马上要上线了,同事拿了自己的iOS8系统5s跑真机,无缘无故报错,之前跑她的手机完全没有问题的.Xcode 8.x中最低部署版本是iOS8.0,按理说完全能够跑真机的. 但是报了一个 ...

  9. 批量转换gbk编码的java代码为utf8

    #!/bin/bash echo $1 echo $# if [ ! $# -eq 1 ]; then     echo "usage:  ./gbk2utf8.sh src"   ...

  10. 得到scp命令的完整路径

    奇怪的crontab 遇上shell scp不执行了-CSDN论坛 https://bbs.csdn.net/topics/390593780