Java 打印字符串中字符的位置
我有一个方法,可以在给定字符串中打印给定字符的索引。如果字符串不包含给定字符,则结果为-1。 我的代码如下所示:Java 打印字符串中字符的位置,java,arrays,string,Java,Arrays,String,我有一个方法,可以在给定字符串中打印给定字符的索引。如果字符串不包含给定字符,则结果为-1。 我的代码如下所示: public static int strpos(String text, char z) { int x = 0; char[] array = text.toCharArray(); for (int i = 0; i < array.length; i++) { if (array[i] == z) {
public static int strpos(String text, char z) {
int x = 0;
char[] array = text.toCharArray();
for (int i = 0; i < array.length; i++) {
if (array[i] == z) {
x = i;
break;
} else {
x = -1;
}
}
return x;
}
public static void main(String[] args) {
System.out.println(strpos("abcdefghc", 'c'));
}
publicstaticintstrpos(字符串文本,charz){
int x=0;
char[]数组=text.toCharArray();
for(int i=0;i
在这种情况下,结果是2,如果我删除break,结果是8。如何修改代码以获得2和8的结果?单次返回无法同时获得2和8的结果。
但是,您可以返回一个
ArrayList
您需要:
- 初始化函数开头的列表
- 每次找到一个数字时,不要打断,而是将其添加到列表中
- 完成搜索后,返回列表
另外,为什么还有else?一种解决方案是将索引存储在
列表中,并更改返回方法:
public static List<Integer> strpos(String text, char z) {
List<Integer> indices = new ArrayList<>();
char[] array = text.toCharArray();
for (int i = 0; i < array.length; i++) {
if (array[i] != z) {
continue;
}
list.add(i);
}
return indices.isEmpty() ? Arrays.asList(-1) : indices;
}
公共静态列表strpo(字符串文本,字符z){
列表索引=新的ArrayList();
char[]数组=text.toCharArray();
for(int i=0;i
您可以将返回类型更改为列表
,并收集列表(或您选择的其他集合)中的所有匹配索引。
在这种情况下,不使用-1作为特殊值来指示字符串中不存在字符,而是返回空列表,
当然
这里有一种实现方法:
List<Integer> strpos(String text, char z) {
return IntStream.range(0, text.length())
.filter(i -> text.charAt(i) == z)
.boxed()
.collect(Collectors.toList());
}
你试过使用String.indexOf(char)
方法吗?如果它相等,就把它添加到列表中不是更容易吗?@Neo我很困惑,因为我就是这么做的。逻辑上是的,但是如果char与z
不同,你可以通过continue
来实现它。检查它是否等于z,如果等于,则添加它不是更容易吗?不需要continue
required,行数更少,可读性更强。这是我个人的偏好,因为我倾向于处理许多情况,其中应该跳过循环的特定迭代。归根结底,这没有任何区别。我同意这并不重要。如果给定的字符不在字符串中,则打印-1。@PiotrWanjas使用“c”和字符串“abcdefgch”测试该方法,而不使用中断。你应该得到一个7,但是你会得到一个-1,因为else
。
List<Integer> strpos(String text, char z) {
List<Integer> indexes = new ArrayList<>();
int index = -1;
while (true) {
index = text.indexOf(z, index + 1);
if (index == -1) {
break;
}
indexes.add(index);
}
return indexes;
}