문자열에서 문자 발생 횟수를 어떻게 계산합니까?


547

나는 문자열이

a.b.c.d

'.'의 발생 횟수를 계산하고 싶습니다. 관용적 방식으로, 바람직하게는 하나의 라이너.

(이전에는 모든 사람들이 루프를 사용하지 않고 응답하려고하는 이유가 궁금한 경우를 대비하여이 제약 조건을 "루프없이"로 표현했습니다.)


1
숙제? 그렇지 않으면 루프를 피해야하는 요구 사항이 표시되지 않기 때문입니다.
PhiLho

22
관용적 인 원 라이너를 찾는 것만 큼 루프를 피하십시오.
Bart

2
이와 같은 문제에 대해 루프가 만들어졌으며 일반적인 유틸리티 클래스에서 루프를 작성한 다음 새로 발행 된 한 라이너를 호출하십시오.
che javara

문자열에 대한 비슷한 질문 : stackoverflow.com/questions/767759/…
koppor

지적해야 할 것-원 라이너를 찾는 것이 즐겁고 재미 있고 (진정한 이점으로) 종종 기억하기 쉽지만 별도의 방법과 루프가 거의 모든면에서 더 낫다는 것을 지적하고 싶습니다. -가독성 및 성능. 아래의 "우아한"솔루션은 대부분 문자열 재구성 / 메모리 복사와 관련이 있기 때문에 성능이 좋지 않을 것입니다. 반면에 문자열을 스캔 한 횟수는 빠르고 간단합니다. 일반적으로 성능이 중요한 요소는 아니지만 루프를 통해 한 줄을보고 성능이 더 우수하다고 가정하지 마십시오.
Bill K

답변:


722

이것에 대한 나의 '아이디 오 메틱 원 라이너'는 다음과 같습니다.

int count = StringUtils.countMatches("a.b.c.d", ".");

이미 commons lang 에있을 때 직접 작성해야하는 이유는 무엇 입니까?

이를위한 Spring Framework의 oneliner는 다음과 같습니다.

int occurance = StringUtils.countOccurrencesOf("a.b.c.d", ".");

44
구아바 상당 : int count = CharMatcher.is('.').countIn("a.b.c.d");... 독창적 인 질문으로 dogbane 이 답변했습니다.
Jonik

25
비록 이것을 줄이지는 않지만 (a) 타사 라이브러리가 필요하고 (b) 비싸다.
javadba

이 작업은 스프링 프레임 작업에서만 가져와야합니다.
Isuru Madusanka


19
내가 일한 모든 회사에서 비용이 많이 드는 것은 잘못 작성되고 유지 관리가 잘되지 않은 "* Utils"클래스를 많이 가지고 있습니다. 당신의 일의 일부는 Apache Commons에서 사용 가능한 것을 아는 것입니다.
AbuNassar

1016

이건 어때요. 아래에 정규 표현식을 사용하지 않으므로 다른 솔루션보다 빠르며 루프를 사용하지 않습니다.

int count = line.length() - line.replace(".", "").length();

122
가장 쉬운 방법. 영리한 것. 그리고 그것은 더 StringUtils에 클래스가없는 안드로이드에서 작동
Jose_GD

43
이것이 가장 좋은 대답입니다. 가장 좋은 이유는 다른 라이브러리를 가져올 필요가 없기 때문입니다.
Alex Spencer

27
매우 실용적이지만 못 생겼습니다. 혼란스러운 코드로 이어지기 때문에 권장하지 않습니다.
Daniel San

32
자신의 "StringUtils"클래스의 메서드를 만들어 추악한 코드를 최소화 할 수 있습니다. 그런 다음 못생긴 코드는 정확히 한 지점에 있으며 다른 곳에서는 읽을 수 있습니다.
RonR

30
루프 방법이 이것보다 훨씬 빠릅니다. 특히 String 대신 char을 계산하려는 경우 (String.replace (char, char) 메서드가 없기 때문에). 15 문자열에서 6049ns와 26,739ns의 차이를 얻습니다 (평균 100 회 이상). 원수는 큰 차이가 있지만 현명한 인식은 더해집니다. 메모리 할당을 피하십시오-루프를 사용하십시오!
Ben

282

다른 답변과 하나의 라이너를 사용 하여이 작업을 수행하는 모든 방법을 요약하면 다음과 같습니다.

   String testString = "a.b.c.d";

1) Apache Commons 사용

int apache = StringUtils.countMatches(testString, ".");
System.out.println("apache = " + apache);

2) 스프링 프레임 워크 사용

int spring = org.springframework.util.StringUtils.countOccurrencesOf(testString, ".");
System.out.println("spring = " + spring);

3) 바꾸기 사용

int replace = testString.length() - testString.replace(".", "").length();
System.out.println("replace = " + replace);

4) replaceAll 사용 (사례 1)

int replaceAll = testString.replaceAll("[^.]", "").length();
System.out.println("replaceAll = " + replaceAll);

5) replaceAll 사용 (사례 2)

int replaceAllCase2 = testString.length() - testString.replaceAll("\\.", "").length();
System.out.println("replaceAll (second case) = " + replaceAllCase2);

6) 분할 사용

int split = testString.split("\\.",-1).length-1;
System.out.println("split = " + split);

7) Java8 사용 (사례 1)

long java8 = testString.chars().filter(ch -> ch =='.').count();
System.out.println("java8 = " + java8);

8) Java8 (case 2 )을 사용하면 case 1보다 유니 코드에 더 좋습니다.

long java8Case2 = testString.codePoints().filter(ch -> ch =='.').count();
System.out.println("java8 (second case) = " + java8Case2);

9) StringTokenizer 사용

int stringTokenizer = new StringTokenizer(" " +testString + " ", ".").countTokens()-1;
System.out.println("stringTokenizer = " + stringTokenizer);

코멘트에서 : StringTokenizer, abcd의 경우 작동하지만 a ... bc ... d 또는 ... abcd 또는 a .... b ...... c ..... d에주의하십시오. ... 등이 작동하지 않습니다. 그냥 계산됩니다. 한 번만 문자 사이

github에 대한 추가 정보

성능 테스트 ( JMH 사용 , 모드 = AverageTime, 0.010다음보다 우수 0.351) :

Benchmark              Mode  Cnt  Score    Error  Units
1. countMatches        avgt    5  0.010 ±  0.001  us/op
2. countOccurrencesOf  avgt    5  0.010 ±  0.001  us/op
3. stringTokenizer     avgt    5  0.028 ±  0.002  us/op
4. java8_1             avgt    5  0.077 ±  0.005  us/op
5. java8_2             avgt    5  0.078 ±  0.003  us/op
6. split               avgt    5  0.137 ±  0.009  us/op
7. replaceAll_2        avgt    5  0.302 ±  0.047  us/op
8. replace             avgt    5  0.303 ±  0.034  us/op
9. replaceAll_1        avgt    5  0.351 ±  0.045  us/op

인쇄 된 문자열이 위의 문자열과 일치하지 않으며 순서가 가장 빠르기 때문에 조회가 까다로워집니다. 다른 좋은 답변!
Maarten Bodewes

경우 2 개 이상의 UTF-16 코드 단위가 필요합니다 코드 포인트에 대한 일반화 :"1🚲2🚲3 has 2".codePoints().filter((c) -> c == "🚲".codePointAt(0)).count()
톰 블로 젯

174

조만간 무언가 가 반복되어야합니다. 다음과 같은 것을 사용하는 것보다 (매우 간단한) 루프를 작성하는 것이 훨씬 간단합니다.split필요한 것보다 훨씬 강력한 합니다.

반드시 루프를 별도의 방법으로 캡슐화하십시오. 예 :

public static int countOccurrences(String haystack, char needle)
{
    int count = 0;
    for (int i=0; i < haystack.length(); i++)
    {
        if (haystack.charAt(i) == needle)
        {
             count++;
        }
    }
    return count;
}

그런 다음 기본 코드에 루프가 필요하지 않지만 루프가 어딘가에 있어야합니다.


5
for (int i = 0, l = haystack.length (); i <l; i ++) 스택에 친절해야 함
Chris

12
(댓글의 "스택"비트가 어디에서 왔는지 확실하지 않습니다. 답변이 내 재귀 적 인 것 같지는 않습니다. 실제로 스택에 불쾌합니다.)
Jon Skeet

2
그뿐만 아니라 이것은 jit의 기능을 보지 않고도 안티 최적화 일 수 있습니다. 예를 들어 배열 for 루프에서 위의 작업을 수행하면 상황이 악화 될 수 있습니다.
ShuggyCoUk

4
@sulai : Chris의 관심사는 사소한 JIT 최적화에 직면 한 근거없는 IMO 입니다. 3 년이 지난 지금 의견이 주목을 끌만한 이유가 있습니까? 관심 있어요
Jon Skeet

1
아마도 @sulai는 내가했던 것처럼 (Java에 내장 메소드가 있는지 궁금해하면서) 질문을 받았으며 날짜를 알지 못했습니다. 그러나 @ShuggyCoUk가 언급 한 것처럼 length()루프 외부로 호출을 이동하면 성능 이 어떻게 나빠질 수 있는지 궁금합니다 .
JKillian

63

나는 Mladen과 비슷한 아이디어를 가지고 있었지만 그 반대는 ...

String s = "a.b.c.d";
int charCount = s.replaceAll("[^.]", "").length();
println(charCount);

옳은. ReplaceAll ( ".")은 점이 아닌 모든 문자를 대체합니다. ReplaceAll ( "\\.")이 작동했을 것입니다. 귀하의 솔루션은 더 간단합니다.
VonC

jjnguy는 실제로 "abcd".split ( "\\."). length-1 솔루션을보고 replaceAll ( "[^.]")을 먼저 제안했습니다. 그러나 5 번 맞은 후에 내 답변과 그의 의견을 삭제했습니다.
VonC

(oblig을.) "... 지금 당신은 두 가지 문제가있다"어쨌든,에서 실행 루프 수십 있다는 것을 셨을 텐데요 replaceAll()하고 length(). 글쎄, 보이지 않는 경우 존재하지 않습니다; o)
Piskvor는 건물을 떠나

2
정규식을 사용하고 계산을 위해 새 문자열을 만드는 것이 좋지 않다고 생각합니다. 나는 문자열의 모든 문자를 반복하여 숫자를 세는 정적 메소드를 만들 것입니다.
mingfai

1
@mingfai : 실제로, 원래의 질문은 하나의 라이너를 만들고 루프 없이도 만드는 것입니다 (한 줄에 루프를 수행 할 수는 있지만 추한 것입니다!). 답이 아닌 질문에 답하십시오 ... :-)
PhiLho

37
String s = "a.b.c.d";
int charCount = s.length() - s.replaceAll("\\.", "").length();

ReplaceAll ( ".")은 모든 문자를 대체합니다.

PhiLho의 솔루션 은 ReplaceAll ( "[^.]", "")을 사용합니다. [.]는 'any character'가 아닌 'dot'문자를 나타내므로 이스케이프 할 필요가 없습니다.


난이게 좋아. 물론 거기에는 여전히 루프가 있습니다.
Archetypal 폴

NB 길이가 1보다 작은 하위 문자열을 찾으려면이 숫자를 나누어야하는 NB
rogerdpack

30

내 '아이디 오 매틱 원 라이너'솔루션 :

int count = "a.b.c.d".length() - "a.b.c.d".replace(".", "").length();

StringUtils를 사용하는 솔루션이 왜 허용되는지 모릅니다.


4
이 게시물에는 이와 비슷한 오래된 솔루션이 있습니다.
JCalcines

7
이 솔루션은 실제로 비효율적이므로
András

카운트를 생성하기 위해 추가 문자열을 만듭니다. StringUtils가 옵션 인 경우 왜 누군가가 StringUtils보다 이것을 선호하는지 모르겠습니다. 옵션이 아닌 경우, 유틸리티 클래스에서 간단한 for 루프를 작성해야합니다.
호감

28
String s = "a.b.c.d";
long result = s.chars().filter(ch -> ch == '.').count();

1
기본 솔루션에 대한 투표 +.
Scadge

24

더 짧은 예는

String text = "a.b.c.d";
int count = text.split("\\.",-1).length-1;

3
이것은 상대적으로 큰 오버 헤드가있는 것 같습니다. 많은 작은 줄을 만들 수 있다고 경고합니다. 일반적으로 그다지 중요하지 않지만주의해서 사용하십시오.
Maarten Bodewes

19

루프가없는 솔루션은 다음과 같습니다.

public static int countOccurrences(String haystack, char needle, int i){
    return ((i=haystack.indexOf(needle, i)) == -1)?0:1+countOccurrences(haystack, needle, i+1);}


System.out.println("num of dots is "+countOccurrences("a.b.c.d",'.',0));

글쎄, 루프가 있지만 보이지 않습니다 :-)

-요나탄


2
문자열이 너무 길지 않으면 OutOfMemoryError가 발생합니다.
스펜서 Kormos

문제는 숙제를하기에 충분히 고안된 것 같으며, 그렇다면이 재귀는 아마도 당신이 찾아야 할 답일 것입니다.
erickson

루프가 될 indexOf를 사용하지만 좋은 생각입니다. 1 분 안에 진정으로 "재귀적인"솔루션을 게시하는 중 ...
Jon Skeet

사용 가능한 스택 슬롯보다 많은 발생이있는 경우 스택 오버플로 예외가 발생합니다.)
Luca C.

15

이 목적을 위해 새 문자열을 할당하는 아이디어가 마음에 들지 않습니다. 그리고 문자열에는 이미 값을 저장하는 char 배열이 있으므로 String.charAt ()은 실제로 무료입니다.

for(int i=0;i<s.length();num+=(s.charAt(i++)==delim?1:0))

J2SE만으로 1 줄 이하로 수집이 필요한 추가 할당없이 트릭을 수행합니다.


문자열을 한 번만 통과하는 유일한 사람이기 때문에 이것에 대한 사랑을주는 것입니다. 나는 성능에 관심이 있습니다.
javadba

1
charAt문자가 아닌 16 비트 코드 포인트를 반복합니다! charJava에서 A 는 문자가 아닙니다. 따라서이 답변은의 코드 포인트와 높은 대리 문자가있는 유니 코드 기호가 없어야 함을 나타 delim냅니다. 점에 맞는지 확실하지 않지만 일반적으로 정확하지 않을 수 있습니다.
ceving

14

좋아, Yonatan의 솔루션에 의해 영감, 여기에 하나 순수 재귀 적 인 방법입니다. 사용되는 유일한 라이브러리 방법은 length()charAt()이며 어느 것도 반복하지 않습니다.

public static int countOccurrences(String haystack, char needle)
{
    return countOccurrences(haystack, needle, 0);
}

private static int countOccurrences(String haystack, char needle, int index)
{
    if (index >= haystack.length())
    {
        return 0;
    }

    int contribution = haystack.charAt(index) == needle ? 1 : 0;
    return contribution + countOccurrences(haystack, needle, index+1);
}

재귀가 루핑으로 계산되는지 여부는 사용하는 정확한 정의에 따라 다르지만 아마도 최대한 가깝습니다.

요즘 대부분의 JVM이 꼬리 재귀를 수행하는지 여부는 알 수 없습니다 ... 그렇지 않으면 적절하게 긴 문자열에 대한 스택 스택 오버플로가 발생합니다.


아니요, 꼬리 재귀는 아마도 Java 7에있을 것입니다. 그러나 아직 널리 퍼지지 않았습니다. 이 간단한 직접 테일 재귀는 컴파일 타임에 루프로 변환 될 수 있지만 Java 7 항목은 실제로 JVM에 내장되어 다른 메소드를 통한 체인을 처리합니다.
erickson

3
메소드가 추가 수행 결과를 리턴하는 대신 메소드가 자체 호출 (실행중인 총 매개 변수 포함)을 리턴 한 경우 테일 재귀를 얻을 가능성이 더 큽니다.
Stephen Denne

12

스택을 날리지 않는 비 루프 버전 인 Jon Skeet에서 영감을 얻었습니다. 포크 조인 프레임 워크를 사용하려는 경우에도 유용한 시작점입니다.

public static int countOccurrences(CharSequeunce haystack, char needle) {
    return countOccurrences(haystack, needle, 0, haystack.length);
}

// Alternatively String.substring/subsequence use to be relatively efficient
//   on most Java library implementations, but isn't any more [2013].
private static int countOccurrences(
    CharSequence haystack, char needle, int start, int end
) {
    if (start == end) {
        return 0;
    } else if (start+1 == end) {
        return haystack.charAt(start) == needle ? 1 : 0;
    } else {
        int mid = (end+start)>>>1; // Watch for integer overflow...
        return
            countOccurrences(haystack, needle, start, mid) +
            countOccurrences(haystack, needle, mid, end);
    }
}

(면책 조항 : 테스트되지 않았으며, 컴파일되지 않았으며, 합리적이지 않습니다.)

아마도 그것을 작성하는 가장 좋은 방법 (단일 스레드, 대리 쌍 지원 없음) :

public static int countOccurrences(String haystack, char needle) {
    int count = 0;
    for (char c : haystack.toCharArray()) {
        if (c == needle) {
           ++count;
        }
    }
    return count;
}

11

이것의 효율성에 대해서는 확실하지 않지만 타사 라이브러리를 가져 오지 않고 작성할 수있는 가장 짧은 코드입니다.

public static int numberOf(String target, String content)
{
    return (content.split(target).length - 1);
}

4
문자열 끝에서 발생 횟수를 계산하려면 다음과 같이 음수 제한 인수로 split을 호출해야합니다 return (content.split(target, -1).length - 1);. 기본적으로 문자열 끝에서 발생하는 것은 split ()으로 인해 Array에서 생략됩니다.
vlz를

10

이를 위해 스트림을 사용할 수도 있습니다. 분명히 배후에 반복이 있지만 명시 적으로 작성할 필요는 없습니다!

public static long countOccurences(String s, char c){
    return s.chars().filter(ch -> ch == c).count();
}

countOccurences("a.b.c.d", '.'); //3
countOccurences("hello world", 'l'); //3

.codePoints()대신 대신 사용하면 .chars()대리 쌍이 필요한 값을 포함하여 모든 유니 코드 값이 지원됩니다.
Luke Usherwood

10

Java 8에서 reduce를 사용하여이 문제를 해결할 수도 있습니다.

int res = "abdsd3$asda$asasdd$sadas".chars().reduce(0, (a, c) -> a + (c == '$' ? 1 : 0));
System.out.println(res);

산출:

3

8

완전한 샘플 :

public class CharacterCounter
{

  public static int countOccurrences(String find, String string)
  {
    int count = 0;
    int indexOf = 0;

    while (indexOf > -1)
    {
      indexOf = string.indexOf(find, indexOf + 1);
      if (indexOf > -1)
        count++;
    }

    return count;
  }
}

요구:

int occurrences = CharacterCounter.countOccurrences("l", "Hello World.");
System.out.println(occurrences); // 3

int 발생을 시도 할 때 잘못된 코드가 작동하지 않습니다. = CharacterCounter.countOccurrences ( "1", "101"); System.out.println (발생); // 1
jayesh

동일한 논리로 작동하는 코드에 대한 수정 사항을 적용합니다
MaanooAk

8

답을 얻는 가장 간단한 방법은 다음과 같습니다.

public static void main(String[] args) {
    String string = "a.b.c.d";
    String []splitArray = string.split("\\.",-1);
    System.out.println("No of . chars is : " + (splitArray.length-1));
}

2
이 조각은 주어진 입력에 대해 "ABC"점의 정확한 금액을 반환하지 않습니다
dekaru

@dekaru 댓글에 찌르기를 붙여 주시면 감사하겠습니다.
Amar Magar

5

Spring 프레임 워크를 사용하는 경우 "StringUtils"클래스를 사용할 수도 있습니다. 방법은 "countOccurrencesOf"입니다.


5

split()한 줄의 코드로 함수를 사용할 수 있습니다

int noOccurence=string.split("#",-1).length-1;

Split는 실제로 문자열 배열을 만들어 많은 시간을 소비합니다.
Palec

당신 말이 맞아, 그건 진짜 관심 사야 다른 방법으로 프로젝트에 타사 라이브러리를 가져 오는 것을 피할 수 있습니다 (아직 완료되지 않은 경우). 수행하려는 작업과 성능 기대치에 따라 다릅니다.
Benj

3
limit오버로드 된 split 메소드 호출에서 인수 가 0으로 설정 되므로이 솔루션에는 후행 공백 적중이 포함되지 않습니다 . 예 : 크기 9 ( ) 대신 크기 "1##2#3#####".split("#")4 ( [0:"1";1:""; 2:"2"; 3:"3"]) 의 배열 만 생성합니다 [0:"1"; 1:""; 2:"2"; 3:"3"; 4:""; 5:""; 6:""; 7:""; 8:""].
klaar

4
public static int countOccurrences(String container, String content){
    int lastIndex, currIndex = 0, occurrences = 0;
    while(true) {
        lastIndex = container.indexOf(content, currIndex);
        if(lastIndex == -1) {
            break;
        }
        currIndex = lastIndex + content.length();
        occurrences++;
    }
    return occurrences;
}

4
import java.util.Scanner;

class apples {

    public static void main(String args[]) {    
        Scanner bucky = new Scanner(System.in);
        String hello = bucky.nextLine();
        int charCount = hello.length() - hello.replaceAll("e", "").length();
        System.out.println(charCount);
    }
}//      COUNTS NUMBER OF "e" CHAR´s within any string input

3

메소드가 숨길 수는 있지만 루프 (또는 재귀)없이 계산할 수는 없습니다. 성능상의 이유로 char []를 사용하려고합니다.

public static int count( final String s, final char c ) {
  final char[] chars = s.toCharArray();
  int count = 0;
  for(int i=0; i<chars.length; i++) {
    if (chars[i] == c) {
      count++;
    }
  }
  return count;
}

replaceAll (RE)을 사용하는 것이 가장 좋은 방법은 아닙니다.


이것이 가장 우아한 해결책이라고 생각합니다. charAt이 아닌 toCharArray를 사용한 이유는 무엇입니까?
Panayotis

charAt를 사용한 루핑은 적어도 느려졌습니다. 플랫폼에 따라 다를 수도 있습니다. 실제로 알아낼 수있는 유일한 방법은 차이를 측정하는 것입니다.
tcurdt

3

글쎄, 비슷한 작업 으로이 스레드를 우연히 발견했습니다. 프로그래밍 언어 제한을 보지 못했고 groovy가 java vm에서 실행되기 때문에 Groovy를 사용하여 문제를 해결하는 방법은 다음과 같습니다.

"a.b.c.".count(".")

끝난.


3

훨씬 쉬운 해결책은 일치하는 문자를 기준으로 문자열을 분할하는 것입니다.

예를 들어

int getOccurences(String characters, String string) { String[] words = string.split(characters); return words.length - 1; }

다음과 같은 경우 4를 반환합니다. getOccurences("o", "something about a quick brown fox");


여기서 문제는 배열을 할당해야하는데, 이는 매우 느립니다.
Palec

2

코드 어딘가에서 무언가가 반복되어야합니다. 이 문제를 해결할 수있는 유일한 방법은 루프를 완전히 푸는 것입니다.

int numDots = 0;
if (s.charAt(0) == '.') {
    numDots++;
}

if (s.charAt(1) == '.') {
    numDots++;
}


if (s.charAt(2) == '.') {
    numDots++;
}

... 등, 그러나 당신은 그것을 실행하는 컴퓨터 대신 소스 편집기에서 수동으로 루프를 수행하는 사람입니다. 의사 코드를 참조하십시오.

create a project
position = 0
while (not end of string) {
    write check for character at position "position" (see above)
}
write code to output variable "numDots"
compile program
hand in homework
do not think of the loop that your "if"s may have been optimized and compiled to

2

약간 다른 스타일의 재귀 솔루션이 있습니다.

public static int countOccurrences(String haystack, char needle)
{
    return countOccurrences(haystack, needle, 0);
}

private static int countOccurrences(String haystack, char needle, int accumulator)
{
    if (haystack.length() == 0) return accumulator;
    return countOccurrences(haystack.substring(1), needle, haystack.charAt(0) == needle ? accumulator + 1 : accumulator);
}

2

왜 캐릭터를 분할 한 다음 결과 배열의 길이를 얻으십시오. 배열 길이는 항상 인스턴스 수 + 1입니다. 맞습니까?


2

다음 소스 코드는 사용자가 입력 한 단어에서 주어진 문자열의 발생 횟수를 제공합니다.

import java.util.Scanner;

public class CountingOccurences {

    public static void main(String[] args) {

        Scanner inp= new Scanner(System.in);
        String str;
        char ch;
        int count=0;

        System.out.println("Enter the string:");
        str=inp.nextLine();

        while(str.length()>0)
        {
            ch=str.charAt(0);
            int i=0;

            while(str.charAt(i)==ch)
            {
                count =count+i;
                i++;
            }

            str.substring(count);
            System.out.println(ch);
            System.out.println(count);
        }

    }
}

2
int count = (line.length() - line.replace("str", "").length())/"str".length();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.