黑马程序员技术交流社区
标题:
有关字符串查找问题
[打印本页]
作者:
lnz_黑仔
时间:
2014-12-31 01:08
标题:
有关字符串查找问题
package cn.itcast12_03;
/*
* 获取一个字符串中指定子串出的次数。比如说“fsdhanbasdnbafllgnbahjnbakqqqqlnbaxi” 在这个字符串中,多有个nba?
*/
public class StringTest1 {
public static void main(String[] args) {
String str = "fsdhanbasdnbafllgnbahjnbakqqqqlnbaxnbai";
String regex = "nba";
// 功能
int count = getCount(str, regex);
int count2 = getCount2(str, regex);
System.out.println(count);
}
/*
* 返回值:统计变量的值 int 参数列表:大串和小串
*/
public static int getCount(String maxString, String minString) {
// 定义统计变量
int count = 0;
// 在大串中查找小串一次
int index = maxString.indexOf(minString);
// 如果返回值不是-1,说明小串在大串中是存在的。
while (index != -1) {
// 统计变量++
count++;
// 把查找过的数据给截取掉,重新赋值给大串
maxString = maxString.substring(index + minString.length());
// 在新的大串中查找一次小串
index = maxString.indexOf(minString);
}
return count;
}
// 优化代码
//
public static int getCount2(String maxString, String minString) {
// 定义统计变量
int count = 0;
// 在大串中查找小串一次
int index = 0;
// 如果返回值不是-1,说明小串在大串中是存在的。
// 判断
while ((index = maxString.indexOf(minString)) != -1) {
// 统计变量++
count++;
// 把查找过的数据给截取掉,重新赋值给大串
maxString = maxString.substring(index + minString.length());
}
return count;
}
}
/*String s1="a"+"b"+"c";
String s2="abc";
System.out.println(s1==s2);//true ???????????
System.out.println(s1.equals(s2));// true
String s1="ab";
String s2="abc";
String s3=s1+"c";
System.out.println(s3==s2);//false ???????????
System.out.println(s3.equals(s2));// true*/
作者:
jian叫兽
时间:
2014-12-31 01:50
String s1="a"+"b"+"c";//使用双引号创建字符串与用new完全不同,他会检测在栈中的字符串存储池中是否有值为arit的字符串,如果有则指向它,如果没有,则在栈中创建它;
String s2="abc";//上一句已经在栈中的字符串存储池中有值为abc的字符串,s2会指向它;
System.out.println(s1==s2);//s1和s2指向同一个为abc的字符串,故为true;
String s1="ab";//如上所说,在存储池中创建一个ab的字符串
String s2="abc";
String s3=s1+"c";//由于字符串是不可变的,所以这里的s1+"c"并不是s3由s1+c而变成abc,而是在堆中创建了一个新的值为abc的字符串,注意这里是在堆中创建的,而没有在栈中的字符串存储池中寻找arit然后共享,然后让s3指向了它。
System.out.println(s3==s2);//理解了前面就理解了这个,虽然s2的值与s3一样都为arit,但是却没有实现共享机制,因为s3不是用s3 = “abc”的形式创建的,s3创建在堆中,而s2是创建在了共享池中。二者指向不同的对象,所以用==比较为false。
作者:
l763631191
时间:
2014-12-31 03:36
学习学习!!!
作者:
xiao飞
时间:
2014-12-31 13:39
楼主给力
作者:
hello_csu
时间:
2014-12-31 14:13
个人认为直接利用String中IndexOf(String substr,int FromIndex)方法来实现可能会比较简单。代码如下:
import java.lang.*;
public class StringCounterDemo {
static int SubStringCount(String str,String substr)
{
int count = 0,fromindex=0,k=0;
int sub_len = substr.length();
while(fromindex < str.length()){
k=str.indexOf(substr, fromindex);
if(k==-1)
{
break;
}
else
{
count ++;
fromindex = k + sub_len;
}
}
return count;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("SubCount = " +SubStringCount("abc","abcdef") );
System.out.println("SubCount = " +SubStringCount("abcde","gf") );
System.out.println("SubCount = " +SubStringCount("abcdeabab","ab") );
}
}
复制代码
作者:
红楼
时间:
2014-12-31 18:16
好厉害。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2