xml地图|网站地图|网站标签 [设为首页] [加入收藏]

JavaAPI详解系列必威:,有一道华为上机题

有一个字符串,根据输入参数m,找出字符串的m个字符的所有字符串例如Stringstr="abc",m=2得到结果是"ab""ac""bc"Stringstr="abcd",m=3得到结果是"abc""acd""bcd""abd"求解啊,谢谢

Stringstr3=str.replaceFirst("abc","AB");

栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。

}

说明:

一、使用new创建对象。

System.out.println("子串abc最后次出现的位置是:"+index3);

}

二、调用Class类的newInstance方法,利用反射机制创建对象。

System.out.println("子串ABC不存在");

String是一个只读字符串,上述替换操作没有对原字符串进行修改,返回结果是一个新的字符串对象。

接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。

必威,intindex1=str.indexOf("abc");

publicstaticvoidmain(String[]args) {

Stringstr=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?

intindex3=str.lastIndexOf("abc");

²String replaceAll(String regex, String replacement)

public String(String original) {  //other code ...  }  大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:

if(index4== -1) {

System.out.println("str2="+str2);

我们再回头看看Stringa="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。因此,我们不难理解前面三个例子中头两个例子为什么是这个答案了。

System.out.println("子串abc在索引2开始出现的位置是:"+index2);

Stringstr2=str.replace("abc","AB");

Stringa="ab"+"cd";   再看看这里呢?

publicclassStringDemo3 {

publicclassStringDemo4 {

我们来看一下被我们调用了的String的构造器:

//求子串在字符串出现的位置

Stringstr4=str.replaceAll("[0-9]","A");

答案还是一个。

System.out.println("从索引3开始至未尾的子串为:"+str2);

本文继续演示String方法。

我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。由此我们又要引入另外一种创建String对象的方式的讨论——引号内包含文本。

²indexOf()是返回指定的子串在字符串出现的位置,若不存在则返回-1。

//支持使用正则表达式对原字符串中的所有数字替换成A,生成新的字符串

Stringstr="abc";

}else{

运行的结果如下:

Stringa="abc";  Stringb="abc";   那这里呢?

Stringstr="abc123abc";

²String replace(CharSequence target, CharSequence replacement)

堆区:主要存放Java程序运行时创建的所有引用类型(new()生成的对象)都放在其中;

}

Stringstr="abc123abc56";

我们可以把上面这行代码分成Stringstr、=、"abc"和new String()四部分来看待。Stringstr只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下newString("abc")了。那么,newString("abc")为什么又能被看成"abc"和new String()呢?

System.out.println("从索引3开始至索引6(不含)的子串为:"+str1);

//对原字符串中的中的字符b替换成B,生成新的字符串

只有使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中,对此我们不再赘述。因此我们提倡大家用引号包含文本的方式来创建String对象以提高效率,实际上这也是我们在编程中常采用的。

本文继续演示String方法。

²String replace(char ch1, char ch2)

代码区:主要存放Java的代码;

Stringstr1=str.substring(3, 6);

返回每个子串替换该字符串与给定的替换,给定的正则表达式匹配。

栈区:主要存放Java程序运行时所需的局部变量、方法的参数、对象的引用以及中间运算结果等数据;

//获得索引值为1的字符

返回替换给定的正则表达式匹配的第一个子字符串后一个新字符串。

堆(heap):用于存储对象

//求子串

packagestring.lang.java;

毫无疑问,这行代码创建了一个String对象。

//方式一: 测试是否包含指定的子串

System.out.println("str3="+str3);

这种方式是String特有的,并且它与new的方式存在很大区别。

//方式一:测试是否包含指定的子串

答案是三个。

运行的结果如下:

//对原字符串中的第一个子串abc替换成AB,生成新的字符串

Stringstr=new String("abc") 这行代码究竟创建了几个对象?

System.out.println("包含");

//对原字符串中的abc替换成AB,生成新的字符串

在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们不用担心String对象共享而带来程序的混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。

intindex2=str.indexOf("abc", 2);

²String replaceFirst(String regex, String replacement)

相信大家对这道题并不陌生,答案也是众所周知的,2个。

示例2:演示charAt(),indexOf,lastIndexOf,contains方法。

System.out.println("str1="+str1);

说到这里,我们就需要引入对字符串池相关知识的回顾了。

System.out.println("子串ABC出现的位置是:"+index4);

必威 1

数据区:主要存放静态变量及全局变量  

charch=str.charAt(1);

Stringstr1=str.replace('b','B');

System.out.println("子串abc首次出现的位置是:"+index1);

示例4:replace(),replaceAll(),replaceFirst()方法使用演示。

²contains()测试是否包含指定的子串。

System.out.println("str3="+str4);

必威 2

返回将从原字符串替换target为replacement一个新的字符串。

publicstaticvoidmain(String[]args) {

}

²charAt()返回指字索引位置的字符。

返回从原字符串替换oldChar为newChar一个新的字符串。

//求子串在字符串出现的位置(从后开始)

²lastIndexOf()返回指定的子串大字符串从后开始出现的位置,若不存在则返回-1。

System.out.println("不包含");

booleanflag=str.contains("abc");

packagestring.lang.java;

Stringstr2=str.substring(3);

if(flag) {

System.out.println("索引值为1的字符是:"+ch);

}

intindex4=str.indexOf("ABC");

}else{

}

本文由必威发布于操作系统,转载请注明出处:JavaAPI详解系列必威:,有一道华为上机题