Usando Java, encuentre si la ocurrencia de la letra del rango dado es verdadera para la cadena. Tengo una lista de estas cadenas que tienen el siguiente formato: hay más, pero aquí hay algunos ejemplos.
9-11 w: wwtxmsjwjwlw separate to: 9-11//int-int/range , w //char/letter , wwtxmsjwjwlw//string we are checking --false
5-6 g: wggghg separate to 5-6 , g , wgggghg --true
1-5 g: dxggdggb seperate to 1-5 , g , dxggdggb --true
5-13 f: lfgdplfffxffswck separate to 5-13 , f, lfgdplfffxffswck --true
6-7 z: zzzzgzzzz separate to 6-7 , z , zzzzgzzzz -- check if z is repeated 6-7 times in string zzzzgzzzz which here z is repeated 8 times so its not true --false estos son ejemplos de cadenas dadas que se dividen en 3 partes diferentes que comparten el mismo índice en las diferentes matrices en las que las puse. El objetivo de la pregunta es tomar la ocurrencia de letra/caracter, básicamente verificando si la ocurrencia del rango dado int-int es verdadera en el la cadena es verdadera, entonces cnt ++, no es verdad, no pasa nada, cnt no cambia. -pero quiero verificar si la letra que aparece en el rango dado a la cadena es verdadera- si esto tiene sentido. aquí está mi intento de codificarlo:
public static Scanner reader= new Scanner(System.in); public static void main(String[] args){ int g=1000,cnt2=0; String[] a1 = new String[g]; String[] a2 = new String[g]; String[] a3 = new String[g]; int cnt=0; String regexp = "(?<one>\\d+-\\d+)\\s*(?<two>\\w+)\\s*:\\s*(?<three>\\w+)"; for(int i=0;i<10000;i++) { String str = reader.nextLine(); cnt++; Pattern pattern = Pattern.compile(regexp); Matcher matcher = pattern.matcher(str); if (matcher.matches()) { a1[i]= matcher.group("one"); a2[i]= matcher.group("two"); a3[i]= matcher.group("three"); } if(a3[i].matches("[a2[i]{a1[i]}")==true) {//("[a2[i]{a1[i]}") --a1[i] is error since its int-int and not int,int cause in regex range is {int, int} so how can i change that - to ,or change it so it works? cnt2++; } } System.out.println(cnt); System.out.println(cnt2); }Se supone que cnt2 me diga cuántas de las entradas coinciden con la ocurrencia de esa letra específica, no funciona, por lo que agradecería la ayuda, hágame saber si hay formas más eficientes que mi idea con las matrices. Ayuda para mejorar la pregunta también sería útil gracias
acabo de resolver esta pregunta con el siguiente código para aquellos que estén interesados:
public static Scanner reader= new Scanner(System.in); public static void main(String[] args){ int cnt2=0; String a1=""; String a2=""; String a3=""; int cnt=0; String regexp = "(?<one>\\d+-\\d+)\\s*(?<two>\\w+)\\s*:\\s*(?<three>\\w+)"; Pattern pattern = Pattern.compile(regexp); String str = reader.nextLine(); while (!str.equals("-1")) { System.out.println(str); cnt++; Matcher matcher = pattern.matcher(str); if (matcher.matches()) { a1= matcher.group("one"); a2= matcher.group("two"); a3= matcher.group("three"); } int min=Integer.parseInt( ""+ a1.split("-")[0]); int max=Integer.parseInt( ""+ a1.split("-")[1]); int acurences =("!"+a3+"!").split(a2).length-1; if(acurences>=min &&acurences<=max) { cnt2++; } str = reader.nextLine(); } System.out.println(cnt); System.out.println(cnt2); }