如题,谢谢大家:提供思路也行...
解决方案 »
- 求助一个字符串中很妙的分行问题?
- 欲哭无泪,上班第一天就碰到难题,只有25分了,哪位大哥救救我啊(在java桌面应用中嵌入MATLAB)
- 古老的applet,关于cookie的httponly的解决办法
- 请问 0到 365 整数的正则表达式如何写?
- 关于Unihan Database汉字解码问题,一个汉字对应三个编码,如何利用编码反编码汉字回来呢?
- jar文件问题?
- sql的
- 请问如何在panel中加入AVI或gif文件?另外请问如何打印表?
- 它为什么老是这样????
- 打印嵌有applet的网页,Canon的BJC-4200没有问题,而用HP的黑白激光打印机打印,applet部分是一片黑??各位热心人请帮帮我,谢谢
- dom4j各个版本中使用的jdk的版本?
- 如何使ant编译后的.log仅有Warning或error
直接用int 数组,
int[256] c;
枚举每个字符,直接为相应位置的数组中的值+1,如果大于等于3直接返回true
char c;
int count = 0;
for (int i=0; i<s.length(); i++) {
c = s.charAt(i);
count = 0;
for (int j=i+1; j<s.length(); j++)
{
if (s.charAt(j) == b) {
count++;
}
if (count > 2) {break;}
}
if (count > 2) {break;}
}
return (count > 2);
}
改为 if (count > 1) {break;} //因为还包括c本身
char c;
int count = 0;
for (int i=0; i<s.length(); i++) {
c = s.charAt(i); //得到字符串s的第i个字符,i从0开始的
count = 0;
for (int j=i+1; j<s.length(); j++)
{
if (s.charAt(j) == c) { //刚才笔误,改为c
count++;
}
if (count > 1) {break;} //因为还包括c本身,所以只要再找到2个就符合了,即count > 1 就可以了
}
if (count > 1) {break;}
}
return (count > 1);
}
要求是连续的,那做法很多可以用charAt获得字符后,拼成一个重复的字符串,然后indexOf判断
或者用substring每次取出连续3个字符分别判断
boolean isMultiChar(String s) {
String t;
for (int i=0; i<s.length(); i++) {
t = "";
for (int j=0; j<3; j++) {
t += s.charAt(i);
}
if (s.indexOf(t) >= 0) {return true;}
} return false;
}或者
boolean isMultiChar(String s) {
String t;
for (int i=0; i<s.length()-2; i++) {
t = s.substring(i, i+3);
if (t.charAt(0)==t.charAt(1) && t.charAt(0)==t.charAt(2)) {return true;}
}
return false;
}
boolean isMultiChar(String s) {
for (int i=0; i<s.length()-2; i++) {
if (s.charAt(i)==s.charAt(i+1) && s.charAt(i)==s.charAt(i+2)) {return true;}
}
return false;
}
能说的我都说了,你自己参考修改吧
public boolean isMultiChar(String source){
int[] charInt = new int[256];
for(int i=0;i<source.length();i++){
if(charInt[source.charAt(i)] ++ >= 2 )
return true;
}
return false;
}如果考虑unicode就要用hashtable或map了。
freshman113(逍遥子) 的代码确实简单
算是学习了
public static boolean test(String str){
String s = str;
String tmp;
for(int i='A'; i<='Z'; i++){
tmp = s.replaceAll((char)(i)+"{3,}", "");
if(!s.equals(tmp)){
//System.out.println(tmp);
return false;
}
}
for(int i='a'; i<='z'; i++){
tmp = s.replaceAll((char)(i)+"{3,}", "");
if(!s.equals(tmp)){
//System.out.println(tmp);
return false;
}
}
return true;
}
public static void main(String args[]){
System.out.println(test("abaaaabcccd"));
}
}
Int 数组 下标怎么是source.charAt(i), 一个char 啊,
------------------------------------------------
你想要的结果到底是什么?
这里不是aaaa和ccc都是3个以上的重复连续字符了吗?
安你的要求应该是返回ture的,怎么又变成false了呢?难道是我们误解了你的意思?
三个及三个以上的重复字符
是指有3个子字符串,每个子字符串都由3个以上的相同字符组成,是这个意思吗?
那这3个子字符串要求相同还是要求不同
比如"abaaaabccceddd"为true,而"abaaaabccceaaa"为false
还有如果"abaaaabccceaaa"为true,那么"abaaaaaabccc"算不算true,因为中间的6个a可以看成2个3个a组成
希望楼主把问题描述清楚一些to windy_beijin(windy)
freshman113(逍遥子) 的代码确实简单 但我没有看懂啊,if(charInt[source.charAt(i)] ++ >= 2 ) 什么意思啊
Int 数组 下标怎么是source.charAt(i), 一个char 啊,
-----------------------------------------------------------
返回来的下标被转换为相应的ascii码,也就是个int了,而且,如果是非unicode,这个ascii码是在0-255之间的,所以就要定义一个int[] charInt = new int[256];容纳256个int的数组,其实一开始windindance(风舞轻扬) 就提到了,只是我没注意
每个子字符串都由3个以上的字符组成, 如:abc和abc 及aaa和aaa都算 true
用int[256]的确是个好办法,可惜只能处理基本Ascii码和扩展Ascii码,不能处理其它Unicode字符。
而如果使用int[65536]我觉得必要不大,所以,我还是建议使用Hashtable。
那就这样试试
public boolean isMultiChar(String s) {
for (int i=0; i<s.length()-2; i++) {
if (s.substring(i+3).indexOf(s.substring(i, i+3)) >= 0) {
return true;
}
}
return false;
}
其实,也可以考虑用正则表达式,不过好像这个正则表达式不好写,以后有空再研究了
今天我也闲够了,该工作了
代码比较简练,佩服,是不是做J2ME的啊
public static boolean test(String str){
String s = str;
String tmp;
for(int i=3; i<str.length()/2; i++){
for(int j=0; j<str.length()-2*i; j++){
s = str;
tmp = s.replaceAll(s.substring(j,j+i),"");
if((s.length()-tmp.length())/i >= 2){
return true;
}
}
}
return false;
}
public static void main(String args[]){
System.out.println(test("abaabsasabccdccccc"));
}
}
没,我刚学JAVA不久,各位大哥多关注啊。:)
{
int appear_degree = 0;
int startIndex = 0;
Pattern p = Pattern.compile(regular);
Matcher m = p.matcher(str);
while (m.find(startIndex))
{
appear_degree++;
startIndex = m.end();
}
if (appear_degree >= max_appear)
return true;
return false;
}