How can I iterate over a string in Java?

前端 未结 9 1675
余生分开走
余生分开走 2021-01-02 12:40
public static Boolean cmprStr( String s1, String s2 )
{
    // STUFF
}

I want to iterate through s1 to make sure that every character in s1 is incl

相关标签:
9条回答
  • 2021-01-02 13:11
      for(char c: s1.toCharArray()){
         if(s2.indexOf(c) == -1){
               return false;
         }
      }
      return true;
    

    Assuming that

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

    will return true.

    0 讨论(0)
  • 2021-01-02 13:12

    As I understand the question it would be.

    //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;
    

    This verifies that each character in s1 is in s2. It does not confirm order, nor how many are there, and is not an equals method.

    Recursive:

    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);
    }
    
    0 讨论(0)
  • 2021-01-02 13:15
    length()
    

    will give you the length of a string

    charAt( someIndex)
    

    will give you the character at a given position, so you can iterate the first String.

    indexOf( achar )
    

    will give you the poisition a char in a String, or -1 if it's not there. hence you should be able to look for each character in the first string within the second.

    0 讨论(0)
  • 2021-01-02 13:16
    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();
    

    This has a complexity of O(n+m)... answers using indexOf have an O(n*m) complexity. It does of course use a bit of extra memory temporarily though.

    0 讨论(0)
  • 2021-01-02 13:28

    All the other answers are O(n^2). Here's a way that is linear in time (i.e. O(n)) using Google Guava:

      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();
      }
    
    0 讨论(0)
  • 2021-01-02 13:28
    // 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 
            }
    
    0 讨论(0)
提交回复
热议问题