【问题标题】:Java: how do icheck if a certain character is within a string, then print out the position it is in relative to the string?Java:如何检查某个字符是否在字符串中,然后打印出它相对于字符串的位置?
【发布时间】:2012-04-06 20:55:07
【问题描述】:

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

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”。 有什么可能的方法吗?我曾尝试在代码的加星标区域执行此操作,但没有成功。

【问题讨论】:

  • 为什么投反对票?似乎不是那么糟糕的问题,该操作似乎对 Java 来说是新的。
  • 你的任务中“更难”的部分已经准备好了......只需遍历 int[] 并使用 += 运算符。
  • 我猜您是 Java 新手,因为您违反了命名约定。命名方法和变量时(除非声明为final),第一个单词不大写,但后面的单词大写。例如:thisIsCorrect()快乐编码! :)
  • 您发布的代码不会打印您所说的打印内容。实际上,您发布的代码不会打印任何内容。如果您打印complete 的值,它只会打印返回数组的哈希码(例如[I@190d11) 为什么不显示您正在使用的实际完整代码?

标签: java arrays string search char


【解决方案1】:

只是做

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();

【讨论】:

  • 你应该使用StringBuilder,因为它不同步。
  • @SteveKuo +1 for StringBuilder
  • 为什么会有这么多投票?因为有StringBuffer..? str.char(i) 甚至不是有效代码。如果是这样,看起来他正试图附加实际的 char 值而不是索引。此外,OP 想要在不匹配的情况下附加 0(我知道为什么,但是是的)
  • @SteveKuo:你说得对,我只是不知道这是否是一个多线程应用程序。 :)
  • @Shredder:好了,您的担忧得到了解决。 :) 而char 是一个错字。
【解决方案2】:

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

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

【讨论】:

  • 尽管在这种情况下,这不是什么大问题(tm),但我们应该养成使用StringBuilder.append() 而不是原始字符串连接的习惯。
  • 你是对的。但这是一个初学者的问题。而且我认为基本的东西就可以了。
  • 我必须同意 jpm。必须用 StringBuffer 来完成,因为这是 StringBuffers 的用例。
【解决方案3】:

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

StringBuilder positions = "";

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

return positions;

【讨论】:

    【解决方案4】:

    更新为 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');
    

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      相关资源
      最近更新 更多