【问题标题】:Finding the position of every one of a certain repeated char/substring in a string查找字符串中某个重复字符/子字符串中每一个的位置
【发布时间】:2014-02-04 12:39:00
【问题描述】:

虽然我正在尝试做的事情非常明显,但我不想被告知如何得出最终结果,即使我的处理方式是错误的(尽管提示会受到赞赏) .总之……

以字符串格式的数字“01110101”的 8 位二进制表示为例。如果我颠倒数字,我会得到“10101110”。如果我想找到每个 1 的位置并将它们添加到一个数组中,我将如何去做呢?我尝试使用 indexOf('1'),但它一直返回 0 或 1 作为索引。

编辑:最终结果是指我试图通过所有这些实现的总体目标,而不是我要问的问题。我只是想阻止有人插手告诉我如何从二进制转换为 dec,而不是回答我当前的问题...

Edit2:好的,我会更具体一点。基本上,我正在尝试获取一个二进制数,将它们翻转并获取它们的位置并将它们添加到数组中。然后我将尝试遍历数组,取每个位置的 2 次方并将它们相加。也许不是从二进制转换为十进制的最有效方法,但这是我想出的。

【问题讨论】:

  • indexOf('1') 的问题在于它只返回该字符的第一次出现(由String documentation 指定)。话虽如此,既然您不想要任何具体的答案,请尝试考虑不同的方式来表示您的字符串。查看 String 文档,看看可以调用哪些方法。
  • hint hint charAt(index)
  • 正如其他人已经指出的那样,您可以使用 string.charAt(index) 方法将您指向的字符返回给您。您所要做的就是遍历字符串的所有字符并测试它们是 1 还是 0 .. 或者您所期望的。但如果你想让提示更具体,我当然可以给你一些代码
  • 嗯...不过我不确定它是如何应用的。我正在寻找 1 的位置,而不是测试它们是否是 1。
  • 在遍历字符串时你会知道索引。喜欢:for(int i=0;i<myString.length; i++){ if(myString.charAt(i).equalsIgnoreCase("1"){ // i is the position of the next 1}}

标签: java string char substring


【解决方案1】:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int,%20int)

找到第一个,以此作为寻找下一个的起点,起泡,冲洗,重复。

【讨论】:

    【解决方案2】:

    尝试使用 StringTokenizer 逐个字符地扫描每个字符。

      StringTokenizer s = new StringTokenizer("0101010111101");
      ArrayList index = new ArrayList();
      int count;
    
      while(s.hasMoreTokens){
    
           String num = s.nextToken();
    
           if(num.equals("1")){
               index.add(count);
           }count++;
    
      }
    

    【讨论】:

    • 使用num.equalsIgnoreCase("1") 测试两个字符串的相等性。 equals() 测试两个Objects 是否相同(如果它们具有相同的内容则不是)
    猜你喜欢
    • 2017-03-26
    • 2017-02-15
    • 1970-01-01
    • 2011-01-23
    • 2012-05-21
    • 2015-06-26
    • 2012-06-22
    • 2019-09-22
    • 1970-01-01
    相关资源
    最近更新 更多