繁体   English   中英

Java:如何检查某个字符是否在字符串中,然后打印出它相对于字符串的 position?

[英]Java: how do icheck if a certain character is within a string, then print out the position it is in relative to the string?

我想要做的是创建一个方法,它有一个字符串和一个字符作为参数,然后该方法获取字符串并搜索给定的字符。 如果字符串包含该字符,则返回该字符出现位置的整数数组。 这是我到目前为止所拥有的:

public class Sheet {
public static void main(String[] args) {
    String string = "bbnnbb";
    String complete = null;
    //*******
    for(int i = 0; i < string.length(); i++){
        complete = StringSearch(string,'n').toString();
    }
            //********
}

public static int[] StringSearch(String string, char lookfor) {
    int[]num = new int[string.length()];
    for(int i = 0; i < num.length; i++){
        if(string.charAt(i)== lookfor){
            num[i] = i;
        }
    }
    return num;
}

}

该方法工作正常,并返回:

0
0
2
3
0
0

我想做的是将它们变成 1 个字符串,这样它看起来就像这个“002300”。 有什么办法可以做到这一点? 我曾尝试在代码的加星标区域执行此操作,但没有成功。

做就是了

StringBuffer strBuff = new StringBuffer();
for(int i = 0; i<str.length(); i++)
{
    if(str.charAt(i) == reqChar)
    {
        strBuff.append(str.charAt(i));
    }
    else
    {
        strBuff.append('0');
    }
}
return str.toString();

只需使用+=运算符将结果添加到现有字符串

String complete = "";
for(...)
    complete += StringSearch(string,'n').toString();

更新了StringBuilder以获得更好的实践。

public static String StringSearch(String string, char lookfor) {
    StringBuilder sb = new StringBuilder();

    for(int i = 0; i < string.length; i++){
        if(string.charAt(i) == lookfor)
            sb.append(i);
        else
            sb.append("0");
    }
    return sb.toString();
}

然后你可以只调用它一次,没有 for 循环。 不确定为什么要为字符串中的每个字符调用它。

complete = StringSearch(string,'n');

我会只使用 java 的正则表达式库,这样它更灵活(例如,如果你想查找的不仅仅是一个字符)。 此外,它还经过高度优化。

StringBuilder positions = "";

Pattern pattern = Pattern.compile(string);
Matcher matcher = pattern.matcher(lookfor);
while(matcher.find()){
    positions.append(matcher.start());
}

return positions;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM