javaindexof函数的用法(java中的substring方法)

最近,秋招大面积开始,小编可是有些手忙脚乱、焦虑不安,以至白天哈欠瞌睡,晚上也不能寐。想到论文还没有写,秋招就要老了,笔试面试又那么难,真是“又是一年最难就业季”?!想到这里,小编还是提前有所准备的,你以为这么久没有更新推文,是在冬眠吗?当然不是了,自然是等待搞大事情——修炼那个什么宝典,哦,不,不要想多了,是在学习面试宝典啦。既然不小心说出来,那么好东西我也不能独享,自然要分享刚刚整理出炉的一手资料给大家了。所谓欲练此功必先自功,只有下真功夫把基础学好,以后的学习之路才会更加顺当。为了传播知识,下面就把这些武功秘籍无偿传授给大家。你好我好大家好,大家好才是真的好,所以你觉得还不错记得分享给身边的小伙伴哦,让他们也来练一练这本Java修炼秘籍。

一、Java中常用的包

Java中常用的基础包有java.lang、java.util、java.io等。

这里主要介绍最常用的两个可重用包:java.lang和java.util。

1. 概论

java编程中需要用到一些最基本的类,这些类在java中以包结构来管理,下面是几个最常用的包及其类。

??

javaindexof函数的用法(java中的substring方法)??

上面这个树形图清晰地呈现了java中高度可重用类的组织结构和继承关系,这些可重用包按功能可划分为:

1) java.lang

这是java的核心功能包,主要包括和语言相关的类,提供基本数据类型处理,基本数值函数,字符串处理,线程和异常处理等。该包由解释程序自动加载,不需要显示导入。

2)java.io

该包提供和输入输出相关的类,用于不同设备对数据的输入输出处理。

3)java.util

该包提供一些实用工具,包括集合框架以及遗留的集合类,事件模型,时间和日期实施,随机数生成器和位数组等等。

4)java.net

该包提供一些与网络应用开发的类。

5)java.awt和java.swing

该包提供了用于GUI开发的窗口组件,布局管理,监听事件以及用户交互控制的一些类。

6)java.applet

该包提供浏览器中应用程序插件的类,所需要的类可继承Applet并实现相应功能。

7)java.sql

该包提供java和数据源存储数据交互的接口。

8)java.text

该包提供和自然语言无关的方式处理文本,日期,数字和消息的类和接口。

2. java.lang

定义的类和接口:

包括Object类,该类是整个类继承层次的根节点;

定义了基本数据类型的包装类:Boolean、Character、Byte、Integer、Short、Long、Float和Double;还定义了String 和StringBuffer类。支持基本数据类型和字符串的操作与转换;

定义了Math类,包括PI和E数学常数和一些数学函数;

定义了System类,支持对操作系统的访问,比如I/O流,系统时间,系统属性,环境变量等;

定义了Thread类,Runnable接口,协同支持多线程编程;

定义了Throwable,所有异常类Exception的基类,完成对异常捕获,跟踪和处理等。

Math类

该类中定义了一些数学常量和数学函数,因为是常数或是静态类型,所以不能被继承或实例化。

public static final Double E = 2.7182818284590452354 public static final Double PI = 3.14159265358979323846 public static long abs(double x):传回 x 的绝对值。X也可int long float public static long sin(double x): 传回x径度的正弦函数值 public static long cos(double x):传回x径度的余弦函数值 public static long tan(double x): 传回x径度的正切函数值 public static long asin(double x):传回x值的反正弦函数值。 public static long acos(double x):传回x值的反余弦函数值。 public static long atan(double x):传回x值的反正切函数值。 public static long atan2(double x, double y):传回极坐标(polar)的θ值 public static long floor(double x):传回不大于x的最大整数值 public static long ceil(double x):传回不小于x的最小整数值。 public static long exp(double x):传回相当于ex值 public static long log(double x):传回x的自然对数函数值 public static long max(double x,double y):传回x、y较大数 public static long min(double x,double y):传回x、y较小数 public static long pow(double x,double y):传回x的y次幂值 public static long sqrt(double x): 传回x开平方值 public static long rint(double x):传回最接近x的整数值 public static long round(double x):传回x的四舍五入值 public static long toDegrees(double angrad):传回将angrad径度转换成角度 public static long toRadians(double angdeg): 传回将angdeg角度转换成径度 public static long random():传回随机数值,产生一个0-1之间的随机数(不包括0和1)

3. java.util

为了加深理解和记忆,现列出该包的树状图如下:

??

??

常用类

1)Date时间类

首先看一下时间类的继承图,如下:

??

??

然后分别看一下继承Date的三个子类定义的一些方法:

(1)Date:

??

??

(2)Time:

??

??

(3)Timestamp:

??

??

(4)Vector类

这里只列出它的一些方法,具体介绍见java集合或查阅文档。

??

??

??

??

????

??

二、Java中常用类的总结

序言

JAVA面向对象的编程思想,一个老师对其进行的总结为:——“以类的方式组织代码,以对象的方式组织(封装)数据” 对象:可以类比为现实生活中具体的事务;类:则是对对象的抽象。 类作为编程中最基本的单位,它可以构成我们想要表达的所有事务,现将学到的几个常用类总结如下:

学习总结——常用类

1)object类

object作为所有类的超类,无论是四类八种的基本类型还是引用类型或者是自定义类型都需要extends Object,所以其自然有着强大的功能,它的主要方法有

??

??

??

??

需要注意的几个方法:

(1) finalize: 声明为protected void finalize() throws Throwable:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用会此方法,但是什么时候调用垃圾回收器不确定。在System类中有一个方法:public void gc(),垃圾回收器最终调用的就是这个方法。

(2)clone:Object类中的clone方法执行特定的复制操作,首先如果对象不能实现接口Cloneable,则会抛出 CloneNotSupportedException。

(3)toString:在平时编程中,我们都有这样的发现 System.out.println(oo)的输出与Systeml.out.println(oo.toString)输出结果一样, 为什么呢?

这是因为System.out.println方法在打印引用(参数)时若引用(参数)不为空,则首先调用指向对象(参数)的toString方法获取字符串,然后打印字符串的内容。如果我们没有重写toString方法,就会按Object类中的对toString的实现方法获取字符串,打印出来的内容就是this.getClass.getName @ Integer.toHexString(this.hashCode),一般就比较难理解,所以好多大神都建议当自定义类时,最好重写toString方法,这样我们也就可以显示成员变量的值。

??

??

(4)equals:方法的重要意义

??

??

惊不惊喜?意不意外???

??

所以,如果你业务有需要,想实现equals方法最终输出为true,那还是乖乖的在自定义时重写equals方法吧。又有人会问,那int、char、String等方法也没见我重写啊,输出来就是true啊,那是因为可爱的Java创始人在JDK5.0就创造了包装类。所谓包装类我把他定义为数据类型界的暖男,平时不声不响,当他的女朋友——基本数据类型或String类需要处理数据时,他就会默默的为”她“auto-boxing,unboxing(自动装箱、自动装箱),当然此处你要把他两看作一家人(包装类有时候被我们简化,我们不能直观看到)。

2)Scanner类

(1)类的功能:该类存在于java.util.Scanner包中,其主要作用是建立一个文本扫描器(键盘录入)。在键盘的录入过程中,Scanner sc = new Scanner(System.in);

System类中的静态字段为:

public static final InputStream in: 标准输入字节流

InputStream :输入字节流InputStream is = System.in ; 实质:抽象类多态

public static final OutputStream out: 标准输出流

(2)判断功能:在录入数据之前添加逻辑判断,hasNextXXX(),判断是否有下一个可以录入的XXX类型的数据。nextXXX(),通过录入来获取这个XXX类型的数据,如果输入数据与判断数据不一致,则会抛出java.util.InputMismatchException(输入和想得到的数据不一致)。其中nextXXX和hasNextXXX可以分别为以下函数:

??

?? ??

??

(3)注意事项:通过Scanner类接收的是字符串,如果想要int类型的数据需要类型解析转换。如,接收一行字符串,然后以空格切分,放入String数组,再逐个转换为int类型的数据:

Scanner scan = new Scanner(System.in); String str = scan.nextLine();String[] split = str.split(” “);int a[] = new int[split.length];for(int i=0;i<split.length;i ){ a[i] = Integer.parseInt(split[i]);}

注意,当先录入int类型的数据再录入String类型的数据时,会遇到String数据还没有接收到,就直接输出结果了,这是由于“回车”导致的。一回车,直接输出结果这种情况,解决方案有二:其一,使用next()方法,其二,再创建一个键盘输入对象录入String类型。

3)包装类

学习最大的动力就是永远有问不完的问题。学知识有三问—Why?When?where?

1)why?

其实Java并不是纯面向对象的语言。比如,java中的基本数据类型就不是面向对象的,但是我们在实际运用中经常要将基本数据类型转化为对象便于操作。

2)when??

什么时候使用包装类?自然是你需要操作数据的时候,例如进制之间的相互转化、数据之间的比较(compare)、求出该类型的最大最小值等等。

3) where???

第一个where: 包装类都位于Java.lang包下

第二个where: 至于在哪用,根据具体问题具体定夺。

4)String类

(1)类的功能:代表字符串,Java程序中所有的字符串字面值(如“abc”)都作为此类的实例实现,字符串一旦被赋值,其值不能被改变。

String s = “hello”,与String s = new String(“hello”)两个有什么区别?分别创建了几个对象?

(2)String类常用的构造方法:

public String():表示一个空字符序列。

public String(byte[] bytes,Charset ch):默认字符集(编码格式):GBK,如果是GBK格式,可以不写第二个参数

public String(byte[] bytes,int index,int length):将部分字节数组构造成一个字符串

public String(char[] value):将字符数组构造成一个字符串

public String(char[] value,int index,int length):将部分的字符数组构造成一个字符串

public String(String original):通过字符串常量构造一个字符串对象

(3)注意事项:

其一、数组中没有length()方法,它只有length属性。字符串中有length()方法,集合中没有length()方法,用size()方法获取集合中元素的数量。

其二、字符串变量(str1, str2…)相加,先开辟空间,再相加。字符串常量(如”ab”, “122”…)相加,首先在字符串常量池中找,判断有没有这个常量值, 则需要创建;有的话,则直接返回。

(4)编码与解码格式一样(默认为GBK格式,一个中文对应两个字节。utf-8编码,一个汉字对应三个字节)。

(5)String类中的判断功能:

boolean equals(Object obj):当前该对象与obj这个对象是否相等;

boolean equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写

boolean contains(String str):判断str这个字符串是否包含在当前字符串中

boolean startsWith(String str):是否以str子字符串开头

boolean endsWith(String str):判断是否以str子字符串结尾

boolean isEmpty():判断字符串是否为空

(6)String类中转换功能(重点)

byte[] getBytes():将字符串转换字节数组

static String valueOf(char[] chs):将字符数组转换成字符串

static String valueOf(int i):将一个int类型的数据转换成字符串

字符串中获取下标对应的子串的值的方法:

??

??

指定索引位置的字符值——charAt(int index)

??

??

字符串中获取某元素(字符、字符串)下标的方法:

??

??

注意:

String类中的valueOf()可以将任何数据类型转换成字符串

String toLowerCase():将字符串全部转换成小写

String toUpperCase():将字符串全部转换成大写

String concat(String str):字符串拼接方法

(7)String类的其他功能:

替换功能:

public String replace(char oldChar,char newChar):将字符串中某一个字符用新的字符替换

public String replace(String oldStr,String newStr):将字符串中某子字符串用新的字符串替代

去除字符串两端空格:public String trim()

两个字符串进行比较:

public int compareTo(String anotherString) 是Comparable接口中的方法(该接口可以实现一个自然排序)

Comparator接口可以比较器排序

(8)关于递归:

自己调用自己的方法,称为方法递归,递归的三个条件:A. 需要定义方法,B. 要有出口条件,C. 满足一定的规律,构造方法不能使用递归

(9)总结一下常用的方法:

a)创建String类型的数据

String 变量名 = new String();

String 变量名 = new String(“字符串”);

String 变量名 = “abc…”;

b) String类的常用属性和方法

1、 length() 数组的长度

2、 charAt(index) 根据下标找字符

3、 indexOf(Str) 根据字符找下标(从左到右找到该字符第一次出现的下标)

4、 indexOf(String str,int fromIndex) 从指定的位置开始查找该字符第一次出现的位置

5、 lastIndexOf(String str) 根据字符找下标(从右往左查找该字符第一次出现的下标)

6、 lastIndexOf(String str ,fromIndex) 根据字符找下标(从指定的位置开始从右往左查找该字符第一次出现的 下标)

7、 replace(String oldStr , String newStr) 字符串替换

8、 split(String str) 使用指定的字符,分割字符串,返回相应的字符串数组

9、 concat(String str) 字符串拼接

10、 contains(String str) 字符串是否包含指定字符(结果为boolean类型的)

11、 equals(“”) 比较两个字符串是否相等,得到的结果是boolean类型

12、 subString(int beginIndex) 从指定下标开始截取,直到字符串结束

13、 subString(int beginIndex,endIndex)从指定下标开始截取到指定位置

14、 toLowerCase() 将大写转化为小写

15、 toUpperCase() 将小写转化为大写

16、 toCharArray()将字符串转化为字符数组,返回类型为char[]

public class StringMethodTest { public static void main(String[] args) { String str1 = “abcdef”; String str2 = “123456”; String str = str1 str2; int index1 = str1.indexOf(“c”); //子串”c”对应的索引值:2 int index2 = str2.indexOf(1); //int值1在字符串str2中对应的索引值不存在,返回-1 String value1 = str1.valueOf(‘f’); //字符’f’在字符串str1中对应的的值为”f” String b = String.valueOf(2); //返回参数所代表的字符串,可以创建字符串2 char c = str2.charAt(2); //返回在字符串str2中索引号2所对应的字符3 System.out.println(index1); System.out.println(index2); System.out.println(value1); System.out.println(b); System.out.println(c); }}

5)StringBuffer类

(1)StringBuffer:线程安全的可变字符序列。

(2)StringBuffer的构造方法:

public StringBuffer()构造一个不带字符的字符串缓冲区,其初始容量为16个字符

public StringBuffer(int capacity)构造一个不带字符,但具有指定初始容量的字符串缓冲区

public StringBuffer(String str)构造一个字符串缓冲区,并将其内容初始化为指定的字符串内

容。该字符串的初始容量为 16 加上字符串参数的长度。

(3)获取长度和容量的方法:

public intlength():获取字符串长度数

public intcapacity():获取当前字符串缓冲区的容量(带指定长度的参数,其初始容量为指定

的长度;带字符串的StringBuffer的构造方法的初始容量为16加上字符串参数的长度)

(4)StringBuffer中的和添加有关的方法:

public StringBufferappend(int/String/char/boolean/double/float….):该方法往缓冲区中

追加数据,返回字符串缓冲区本身(是经常使用的)

public StringBufferinsert(int offset,String str):在指定起始位置offset处插入str这个字符串,返

回字符串缓冲区本身(StringBuffer类型)

(5)StringBuffer的删除相关方法:

public StringBufferdeleteCharAt(int index):删除指定位置处的字符,返回字符串缓冲区本身。

public StringBufferdelete(int start,int end):删除从指定位置开始到指定位置结束的字符,返回

值是字符串缓冲区本身

(6)StringBuffer的反转功能:

public StringBufferreverse():将此字符串中的字符序列直接反转过来

(7)StringBuffer的替换功能:

public StringBufferreplace(int start, int end,String str):从指定位置开始到指定位置结束的字

符用str子字符串去替代

(8)StringBuffer的截取功能:

public Stringsubstring(int start):从指定位置默认截取到末尾,返回值是一个新的字符串

public Stringsubstring(int start,int end):从指定位置开始截取到指定位置结束,包前不包

后,返回一个新的字符串

(9)StringBuffer和String 的区别?

StringBuffer会构造一个字符串缓冲区,从内存角度考虑,一般情况使用StringBuffer比较多

(在单线程程序中使用StringBulider替代StringBuilder:线程不安全,单线程是为了提升执行效率!)

String:普通的一个字符串,从内存角度考虑,耗费空间,执行效率低!

(10)StringBuffer和数组的区别?

都属于容器类型的变量,数组只能存储一种类型的数据,并且长度是固定的,StringBuffer

可以存储任意类型的元素。

(11)静态代码块 ,构造代码块,构造方法的优先级问题:

静态代码块>构造代码块>构造方法…

例子:

class B{/* private static ArrayList<String> array ; public B(){ array = new ArrayList<String>() ; }*/ //成员变量的位置 public static B t1 = new B() ; public static B t2 = new B() ; { System.out.println(“构造代码块”); } static{ System.out.println(“静态代码块!”); }}public class Demo { public static void main(String[] args) { B b = new B() ;//构 构 静 构 //静态代码块>构造代码块>构造方法… }}

6)Integer类

(1)自动拆箱、自动装箱:自动拆、装箱是在JDK5.0之后添加进来的(java的jkd5.0以后:还有一些新特性:可变参数、增强for循环、静态导入、枚举…)。引用前辈的话说,自动拆箱装箱其实就是编译器帮我们改进代码。

例如:int C = new Integer(15000); 相当于 new Integer(15000).intValue//自动拆箱:包装类型->基本类型

Integer B = 15000; 相当于 new Integer(15000).intValue //自动装箱:基本类型->包装类型

特别需要注意的是: 在[-128,127]之间的int数,JVM依然当作基本数据类型进行处理,目的是为了加快代码的执行效率。自动拆箱:包装类型->基本类型,自动装箱:基本类型->包装类型。

(2)基本数据类型对应的引用类型。

* 基本类型 引用类型 * int Integer * char Character * byte Byte * boolean Boolean * double Double * float Float * long Long * short Short

将基本类型—>引用类型的作用:就是为了和String类型进行转换

7)Character

(1) Character 类:在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段

构造方法: public Character(char value)构造一个新分配的 Character 对象,用以表示指定的 char 值。

(2) Character类的判断功能:

public static boolean isLowerCase(char ch)确定指定字符是否为小写字母。

public static boolenn isUpperCase(char ch)确定指定字符是否为大写字母。

public static boolean isDigit(char ch)确定指定字符是否为数字。

注意:这几个判断是否是大写、小写、数字的函数是Character类所有的,String类并没有。

(3)Character常用的转换功能:

public static char toUpperCase(char ch):将指定字符转换成大写

public static char toLowerCase(char ch):将指定字符转换成小写

(4) 例题:

示例1:键盘录入一个字符串,判断给定字符是否是大写字母字符,小写字母字符,数字字符(不考虑其他字符,使用Character提供的判断功能去完成)

public class CharacterDemo2 { public static void main(String[] args) { //public static boolean isLowerCase(char ch)确定指定字符是否为小写字母 System.out.println(“isLowerCase:” Character.isLowerCase(‘a’)); System.out.println(“isLowerCase:” Character.isLowerCase(‘A’)); System.out.println(“isLowerCase:” Character.isLowerCase(‘0’)); System.out.println(“—————————————“); //public static boolenn isUpperCase(char ch)确定指定字符是否为大写字母 System.out.println(“isUpperCase:” Character.isUpperCase(‘a’)); System.out.println(“isUpperCase:” Character.isUpperCase(‘A’)); System.out.println(“isUpperCase:” Character.isUpperCase(‘0’)); System.out.println(“—————————————“); //public static boolean isDigit(char ch)确定指定字符是否为数字。 System.out.println(“isDigit:” Character.isDigit(‘a’)); System.out.println(“isDigit:” Character.isDigit(‘A’)); System.out.println(“isDigit:” Character.isDigit(‘0’)); }}

示例2:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符有多少个(不考虑其他字符,使用Character提供的判断功能去完成)

1)定义三个统计变量 bigCount、smallCount、numberCount; 2)创建键盘录入对象,录入并接收一个字符串;

3)将字符串转换成字符数组;

4)遍历字符数组,获取到每一个字符;

5)使用Character类中的判断功能判断是否是大写、小写、数字字符;

6)输出

public class CharacterTest { public static void main(String[] args) { //定义三个统计变量 int bigCount = 0 ; int smallCount = 0 ; int numberCount = 0; //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //录入并接收数据 System.out.println(“请您输入一个字符串:”); String line = sc.nextLine(); //将字符串转换成字符数组 char[] chs = line.toCharArray() ; for(int x = 0 ; x < chs.length ; x ){ //获取每一个字符 char ch = chs[x] ; //判断 if(Character.isUpperCase(ch)){ bigCount ; }else if(Character.isLowerCase(ch)){ smallCount ; }else if(Character.isDigit(ch)){ numberCount ; }else{ continue; } } System.out.println(“大写字母字符共有:” bigCount “个”); System.out.println(“小写字母字符共有:” smallCount “个”); System.out.println(“数字字符共有:” numberCount “个”); }}

8)Math类

Math类包含许多数学计算的方法,在java.lang.Math包中,java.lang包不需要显式导入。

方法:(所有的方法都是静态方法)

(1)abs():返回绝对值

(2)round() 四舍五入

(3)ceil() 上取整

(4)floor() 下取整

(5)random() 随机数

??

??

例如: long a = Math.round(6.66); //a=7

9)Random

随机类Random所在Java包为java.util.Random

(1) nextInt() 取int范围内的随机数

(2) nextInt(n) 取值范围0~n包括0 ,不包括n

??

??

例如:int r = rand.nextInt(100);返回[0, 100)之间的一个随机数。

10)日期类

日期类,包含获取时间、日期、设定格式等的方法,在java.util.Date包中。

(1)创建时间对象 Date date = new Date(); 可以得到当前时间

getTime() 获得时间的毫秒值

(2)创建时间格式化对象 SimpleDateFormat sim = new SimpleDateFormat(“字符串格式”);

a) yyyy代表的是4位的年; b) yy代表的是年份的最后两位

c) MM代表的是月份; d) dd 代表的是日期

e) hh代表的是小时; f) mm代表分钟; g) ss代表的秒

(3)format() 将日期格式转化为字符串类型

(4)parse()将字符串转化为日期类型

??????

??

例如:

Date d = new Date();long time = d.getTime();int date = d.getDate();

发表评论

登录后才能评论