如何在Java中迭代字符串?

时间:2011-05-30 16:35:58

标签: java string

public static Boolean cmprStr( String s1, String s2 )
{
    // STUFF
}

我想迭代s1以确保s1中的每个字符都包含在s2中。

9 个答案:

答案 0 :(得分:11)

  for(char c: s1.toCharArray()){
     if(s2.indexOf(c) == -1){
           return false;
     }
  }
  return true;

假设

  s1 = "aabb";
  s2 = "ccddaannbbss";

将返回true。

答案 1 :(得分:11)

public static Boolean cmprStr( String s1, String s2 )
{
    for (int i = s1.length() - 1; i >= 0; --i) {
         if (s2.indexOf(s1.charAt(i)) == -1) {
             return Boolean.FALSE;
         }
    }
    return Boolean.TRUE;
}

答案 2 :(得分:8)

length()

会给你一个字符串的长度

charAt( someIndex)

将为您提供给定位置的字符,因此您可以迭代第一个字符串。

indexOf( achar )

会给你一个字符串中的char,或者如果它不存在则为-1。因此,您应该能够在第二个字符串中查找第一个字符串中的每个字符。

答案 3 :(得分:3)

所有其他答案都是O(n ^ 2)。这是一种使用Google Guava

的时间线性方式(即O(n))
  public static boolean cmprStr(String s1, String s2) {
    Set<Character> desiredCharacters = Sets.newHashSet(Lists.charactersOf(s2));
    return Sets.difference(Sets.newHashSet(Lists.charactersOf(s1)), desiredCharacters).isEmpty();
  }

答案 4 :(得分:2)

Set<Character> charsInS1 = new HashSet<Character>();
for (int i = 0; i < s1.length(); i++) {
  charsInS1.add(s1.charAt(i));
}
for (int i = 0; i < s2.length(); i++) {
  charsInS1.remove(s2.charAt(i));
}
return charsInS1.isEmpty();

这具有O(n+m)的复杂性...使用indexOf的答案具有O(n*m)复杂度。它当然会暂时使用一些额外的内存。

答案 5 :(得分:1)

为什么不简单地使用'equals'方法?

Boolean b = s1.equals(s2);

答案 6 :(得分:1)

每个String在Java中也是CharSequence。因此,您可以使用简单的for循环轻松迭代String

int n = s.length();
for (int i = 0; i < n; ++i) {
    char c = s.charAt(i);
    ...
}

答案 7 :(得分:0)

我理解这个问题。

//for each character in s1
  //if s2 does not contain character return false

//return true

for(int i = 0; i < length s1; i++){
  if(!s2.contains(String.valueOf(s1.charAt(i)))){
    return false;
  }
}
return true;

这将验证s1中的每个字符是否在s2中。它不确认顺序,也不确定有多少顺序,并且不是等于方法。

递归:

public static Boolean cmprStr( String s1, String s2 )
{
  if(s1.length() == 0 )
  {
    return true; 
  }
  if(!s2.contains(s1.substring(0,1)))
  {
    return false;
  }
  return cmprStr(s1.substring(1), s2);
}

答案 8 :(得分:0)

// Here's some code I wrote to find CG ratio in a gene     
public double findCgRatio(String gene)
        {
            double cCount =0.0; 
            double gCount =0.0; 
            gene = gene.toLowerCase(); 
            for(char character : gene.toCharArray())
            {
                if(character == 'c')
                {
                    cCount++; 
                }
                else if(character == 'g')
                {
                    gCount++; 
                }

            }
            System.out.println("CG Ratio was :" + (cCount/gCount) );  
            return cCount/gCount;  // cgRatio 
        }