Java 仅打印给定字符串中的3个连续字符
我只想从给定字符串中打印3个相同的连续字符,如下所示 如果输入为:Java 仅打印给定字符串中的3个连续字符,java,string,char,Java,String,Char,我只想从给定字符串中打印3个相同的连续字符,如下所示 如果输入为: "aasssfddddvvv" 然后我应该将输出作为输出: sss vvv count=2 这是我的要求,请在这方面帮助我 我的代码: import java.util.Scanner; class Test { public static void main(String args[]) { Scanner scan = new Scanner(System.in); Syst
"aasssfddddvvv"
然后我应该将输出作为输出:
sss
vvv
count=2
这是我的要求,请在这方面帮助我
我的代码:
import java.util.Scanner;
class Test {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the String: ");
char s[] = scan.nextLine().toCharArray();
for (int i = 0; i < s.length - 1; i++) {
if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] == s[i + 3]) {
System.out.println(s[i]);
}
}
scan.close();
}
}
import java.util.Scanner;
课堂测试{
公共静态void main(字符串参数[]){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入字符串:”);
char s[]=scan.nextLine().tocharray();
对于(int i=0;i
第一个问题是,您试图达到中数组的长度+2索引,这是不可能的
假设字符串长度为5
0: 0 1 2
1: 1 2 3
2: 2 3 4
3: 3 4 (5)
4: 4 **(5) (6)**
如您所见,您试图达到5,这不是字符串的一部分。所以试试看
for (int i = 0; i < s.length - 2; i++)
而不是
if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] == s[i + 3])
无法检查。单元格i+2和i+3,因为当到达i=长度-2时,将跨越数组边界, 您应该计算序列并检查长度是否足够,如果足够,请打印。此外,在您的示例中,您比较的是4个单元格,因此长度将为4而不是3,请在1中开始seq,因为当您读取单个字符时,其序列为1:
import java.util.Scanner;
class Test {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the String: ");
char s[] = scan.nextLine().toCharArray();
int seqLen = 3;
int cnt = 1;
for (int i = 1; i < s.length; i++) {
if (s[i] == s[i - 1]) {
cnt++;
}
if((cnt==seqLen)&&((s[i] !=s[i - 1] || i == s.length)){
if(cnt == seqLen)
{
for(int j= 0; j<seqLen; j++)
{
System.out.println(s[i - 1]);
}
}
cnt=1;
}
}
scan.close();
}
}
import java.util.Scanner;
课堂测试{
公共静态void main(字符串参数[]){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入字符串:”);
char s[]=scan.nextLine().tocharray();
int-seqLen=3;
int-cnt=1;
对于(int i=1;i 对于(int j=0;j首先遍历char[]
数组。然后,在if
语句中
- 首先确保数组中剩余的字符超过2个
- 然后将
s[i]
与下一个字符(s[i+1]
)和下一个字符(s[i+2]
)之后的字符进行比较
替换代码的这一部分
for (int i = 0; i < s.length; i++) {
if (i < s.length - 2 && s[i] == s[i + 1] && s[i] == s[i + 2]) {
System.out.println(s[i]);
}
}
for(int i=0;i
这个答案与OP中使用的更为手动的方法不同。但是,使用Java中的正则表达式模式匹配器处理这个问题相当简单。我们可以在模式()\\2*
上进行匹配,以捕获类似字母的所有组。然后,只需打印出出现为3的组
String line = "aasssfddddvvv";
String pattern = "((.)\\2*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
if (m.group(1).length() == 3) {
System.out.println(m.group(1));
}
}
sss
vvv
用这个替换代码的主要逻辑。
这里我们检查是否只有3个重复字符。通过确保第四个字符不同
int count=0;
for (int i = 0; i < s.length - 3; i++) {
if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] != s[i + 3]) {
System.out.println(s[i]+s[i]+s[i]);
count++;
}
}
System.out.println("count="+count);
int count=0;
对于(int i=0;i
导入java.util.Scanner;
课堂测试{
公共静态void main(字符串参数[]){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入字符串:”);
char s[]=scan.nextLine().tocharray();
整数计数=0;
对于(int i=0;i
您似乎只需要3个连续字符的严格计数。如果是这种情况,即使在修复代码中的问题(不改变整体逻辑)后,它也会打印ddd
两次。以下是固定代码的输出:
sss
ddd
ddd
vvv
count=4
我所说的固定代码是指处理这些问题
比较太长,修复方法:删除和&s[i]==s[i+3]
需要将条件调整为i
只打印一个字符(可能不是真正的问题)
每次找到匹配项时添加计数器
这是固定的代码(请记住,这仍然不能产生您想要的正确输出)
基本思想是遍历字符串,如果相同,则将字符数增加一,如果不同,则重置。我们还需要使用不打算用作输入的字符对其进行初始化,例如!
因为我们要遍历整个字符串,所以for循环条件需要使用i
转到最末尾
重置时(检测到不同字符时),我们还想检查前一个是否有char\u count=3
。如果是匹配项,则增加occurrence\u count
。我们还需要在for循环后再次执行此操作,因为可能不会对输入字符串末尾发生的连续事件进行检查。代码如下:
int occurence_count = 0;
int char_count = 0;
char last_char = '!';
for (int i = 0; i < s.length; i++) {
if (s[i] != last_char) {
if (char_count == 3) {
occurence_count++;
System.out.println(""+last_char+last_char+last_char);
}
last_char = s[i];
char_count = 0;
}
char_count++;
}
if (char_count == 3) {
occurence_count++;
System.out.println(""+last_char+last_char+last_char);
}
System.out.println("count=" + occurence_count);
int发生次数\u计数=0;
int char_count=0;
char last_char='!';
对于(int i=0;iimport java.util.Scanner;
class Test {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the String: ");
char s[] = scan.nextLine().toCharArray();
int count=0;
for (int i = 0; i < s.length - 3; i++) {
if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i]!=s[i + 3]) {
System.out.println(s[i]+s[i]+s[i]);
count++;
}
}
if(s[s.length - 3] == s[s.length - 2] && s[s.length - 3] == s[s.length - 1]){
System.out.println(s[s.length]+s[s.length]+s[s.length]);
count++;
}
scan.close();
System.out.println(count);
}
}
sss
ddd
ddd
vvv
count=4
int occurence_count = 0;
for (int i = 0; i < s.length - 2; i++) {
if (s[i] == s[i + 1] && s[i] == s[i + 2]) {
occurence_count++;
System.out.println(s[i]);
}
}
System.out.println("count=" + occurence_count);
int char_count = 0;
char last_char = '!';
int occurence_count = 0;
int char_count = 0;
char last_char = '!';
for (int i = 0; i < s.length; i++) {
if (s[i] != last_char) {
if (char_count == 3) {
occurence_count++;
System.out.println(""+last_char+last_char+last_char);
}
last_char = s[i];
char_count = 0;
}
char_count++;
}
if (char_count == 3) {
occurence_count++;
System.out.println(""+last_char+last_char+last_char);
}
System.out.println("count=" + occurence_count);