2017-04-27 49 views
5

Tôi đang cố gắng giải quyết vấn đề nơi tôi tạo phương thức đếm số lần xuất hiện vốn và chữ thường ("A" hoặc "a") trong một chuỗi nhất định. Tôi đã được làm việc về vấn đề này trong một tuần nay, và lỗi chính mà tôi nhận được là "char không thể được dereferenced". Bất cứ ai có thể chỉ cho tôi theo hướng đúng về vấn đề Java này? Cảm ơn bạn.Đếm số lần xuất hiện cụ thể trong chuỗi java

class Main{ 
    public static int countA (String s) 
    { 
     String s1 = "a"; 
     String s2 = "A"; 
     int count = 0; 
     for (int i = 0; i < s.length; i++){ 
      String s3 = s.charAt(i); 
      if (s3.equals(s1) || s3.equals(s2)){ 
       count += 1; 
      } 
      else{ 
       System.out.print(""); 
      } 
     } 
    } 

    //test case below (dont change): 
    public static void main(String[] args){ 
     System.out.println(countA("aaA")); //3 
     System.out.println(countA("aaBBdf8k3AAadnklA")); //6 
    } 
} 
+0

đầu tiên sai lầm 's.length', sai lầm thứ hai' Chuỗi s3 = s.charAt (i); ' –

+0

Ý anh là gì "sai lầm đầu tiên". Tôi nên thay đổi nó thành gì? @OusmaneMahyDiaw –

+0

cho thay đổi đầu tiên thành 's.length()' cho thay đổi thứ hai thành 'String s3 = Character.toString (s.charAt (i));'. một giải pháp tốt khác được đề xuất bởi @ScaryWombat bên dưới trong phần anwer. –

Trả lời

4

thử một giải pháp đơn giản

String in = "aaBBdf8k3AAadnklA"; 
String out = in.replace ("A", "").replace ("a", ""); 
int lenDiff = in.length() - out.length(); 

Cũng như @ Chris đề cập trong câu trả lời của mình, String có thể được chuyển đổi thành chữ thường đầu tiên và sau đó chỉ làm một kiểm tra đơn

+0

Giải pháp rất trực quan ở đây! –

3

Đối đếm số thời gian 'a' hoặc 'A' xuất hiện trong một Chuỗi:

public int numberOfA(String s) { 
    s = s.toLowerCase(); 
    int sum = 0; 
    for(int i = 0; i < s.length(); i++){ 
     if(s.charAt(i) == 'a') 
      sum++; 
    } 
    return sum; 
} 

Hoặc chỉ cần thay thế mọi thứ khác và xem bao lâu chuỗi của bạn là:

int numberOfA = string.replaceAll("[^aA]", "").length(); 
4

lỗi chính mà tôi đang nhận được là "char không thể dereferenced"

thay đổi này:

s.length // this syntax is incorrect 

đến điều này:

s.length() // this is how you invoke the length method on a string 

cũng có, thay đổi này:

String s3 = s.charAt(i); // you cannot assign a char type to string type 

này:

String s3 = Character.toString(s.charAt(i)); // convert the char to string 

giải pháp khác để hoàn thành nhiệm vụ của bạn một cách đơn giản hơn là sử dụng phương pháp Stream#filter. Sau đó, chuyển đổi từng số String trong số Stream thành chữ thường trước khi so sánh, nếu bất kỳ Chuỗi nào khớp với "a" chúng tôi giữ nguyên, nếu chúng ta không bỏ qua nó và cuối cùng, chúng tôi chỉ trả về số đếm.

public static int countA(String input) 
{ 
    return (int)Arrays.stream(input.split("")).filter(s -> s.toLowerCase().equals("a")).count(); 
} 
1

Để tìm số lần vật mộtMột xuất hiện trong chuỗi.

int numA = string.replaceAll("[^aA]","").length(); 
Các vấn đề liên quan