Поиск индекса пары символов в строке
Есть данные от пользователя напр. ("asfdfg84", 'f', 'g'), где "asfdfg84"- строка, а 'f', 'g'- два символа. Мне нужно вывести индекс первого символа. Если первый символ встречается раз то вывести его индекс, а если первый символ встречается два раза в строке, то вывести индекс второго расположения этого символа, если нет совпадений с первым символом, то тогда проверяем совпадения со вторым символом, а если нет вообще никаких совпадений, то вывести -1. Нужно сделать без использования функции indexOf().
import java.util.Scanner;
public class TestIndexOf {
private static String text;
private static char ch1, ch2;
public static void main(String[] args) {
TestIndexOf test = new TestIndexOf();
test.getInput();
System.out.println(test.getIndex(text, ch1, ch2));
}
public static void getInput() {
Scanner scan = new Scanner(System.in);
System.out.println("Enter word and chars: ");
text = scan.nextLine();
ch1 = scan.next().charAt(0);
ch2 = scan.next().charAt(0);
}
public static int getIndex(String tet, char ch1, char ch2) {
int count = 0;
int array[] = new int [2];
int i, j;
for (i = 0; i < tet.length(); i++) {
for ( j = 0; j < array.length; j++) {
if (tet.charAt(i) == ch1) {
array[j] = i;
}
}
return array[j];
}
//
// if(tet.charAt(i) == ch2) {
// count++;
// array = new int [count];
// for ( j = 0; j < array.length; j++) {
// array[j] = i;
//
// }
return -1;
}
}
Ответы (2 шт):
Автор решения: Alexandr
→ Ссылка
Попробуйте так:
public static int getIndex(String str, char ch1, char ch2) {
int index =
getIndex(str, ch1, 2);
return index > -1 ?
index :
getIndex(str, ch2, 1);
}
// В случае, если необходимо n-ое вхождение символа
public static int getIndex(String str, char ch, int maxOrdinal) {
int index = -1;
int found = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ch) {
index = i;
if (++found >= maxOrdinal) {
break;
}
}
}
return index;
}
// В случае, если необходимо последнее вхождение символа
public static int getLastIndex(String str, char ch) {
for (int i = str.length() - 1; i >= 0; i--) {
if (str.charAt(i) == ch) {
return i;
}
}
return -1;
}
Вывод:
Enter word and chars:
asfdfg84
f
g
4
Автор решения: tym32167
→ Ссылка
Простейший пирмер на C#
int getLastIndex(String str, char a, char b)
{
int ind = getLastIndex(str, a);
if (ind > -1) return ind;
return getLastIndex(str, b);
}
int getLastIndex(String str, char c){
for(int i=str.Length-1; i>=0; i--)
if(str[i] == c) return i;
return -1;
}