CodingBat String-1

CodingBat String-1

이번 CodigBat문제는 String관련 문제들!

String에서 java.util.regex.Pattern.matches가 많이 사용됨!

주의해서 일반적인 코딩방법과, Pattern.matches를 사용하는 방법을 살펴보자!

1. helloName

주어진 문자열에 "Hello "문자열을 문자열 앞에 추가해 출력

public String helloName(String name) { return "Hello " + name + "!"; }

2. makeAbba

주어진 두개의 문자열a,b를 abba형식으로 반환해라.

public String makeAbba(String a, String b) { return a+b+b+a; }

3. makeTags

주어진 두개의 문자열 tag와 word를 사용해 word형식으로 반환해라.

public String makeTags(String tag, String word) { return "<"+tag+">"+word+""; }

4. makeOutWord

주어진 out문자열을 반으로 나누어 word문자열을 감싸는 형식으로 출력할것

ex) out : <<>>, word: word => <>

public String makeOutWord(String out, String word) { return out.substring(0,2) + word + out.substring(2,out.length()); }

5. extraEnd

주어진 문자열에서 마지막 2개 문자들을 세번 반복해서 출력해라. 만약 주어진 문자열길이가 3보다 2보다 작다면

그냥 그 문자열을 세번 반복해서 출력할 것.

public String extraEnd(String str) { if(str.length() > 2){ str = str.substring(str.length()-2); } return str + str + str; }

6. firstTwo

주어진 문자열에서 앞에서 두번째 문자까지 출력할것. (str.length()를 사용해서 == 문자열길이함수)

public String firstTwo(String str) { if(str.length() > 1){ str = str.substring(0,2); } return str; }

7. firstHalf

주어진 문자열을 반으로 나누어 앞 문자열을 출력할것. ex) "WooHoo" -> "Woo"

public String firstHalf(String str) { return str.substring(0,str.length()/2); }

8. withoutEnd

주어진 문자열의 첫번째와 마지막 문자를 제거해서 출력해라.

public String withoutEnd(String str) { return str.substring(1,str.length()-1); }

9. comboString

주어진 두개의 문자열의 길이를 비교해 짧은 문자열 + 긴 문자열 + 짧은 문자열 형태로 출력해라.

public String comboString(String a, String b) { if(a.length() > b.length()){ String s = a; a = b; b = s; } return a + b + a; }

10. nonStart

주어진 두개의 문자열의 각각의 가장 앞글자를 제외하고 합쳐서 출력

public String nonStart(String a, String b) { return a.substring(1) + b.substring(1); }

11. left2

주어진 문자열 길이가 2보다 클때, 문자열 인덱스 2번부터 끝까지 출력 + 인덱스0~1까지 출력.

public String left2(String str) { if(str.length() > 2){ str = str.substring(2) + str.substring(0,2); } return str; }

12. right2

주어진 문자열에서 마지막 문자열 2문자들을 먼저출력후 나머지 문자열을 출력해라.

public String right2(String str) { if(str.length() > 2){ str = str.substring(str.length()-2) + str.substring(0,str.length()-2); } return str; }

13. theEnd

주어진 문자열과 boolean값에서, boolean값이 true이면 주어진 문자열의 가장 앞 문자, boolean값이 false이면 주어진 문자열의 마지막 문자를 출력해라.

public String theEnd(String str, boolean front) { if(front){ return str.substring(0,1); } return str.substring(str.length()-1); }

14. withoutEnd2

주어진 문자열의 가장 앞글자와 끝글자를 제외해 출력해라.

public String withouEnd2(String str) { if(str.length()>2){ return str.substring(1,str.length()-1); } return ""; }

15. middleTwo

주어진 문자열의 가운데 두글자를 출력해라.

public String middleTwo(String str) { return str.substring(str.length()/2 -1, str.length()/2 +1); }

16. endsLy

주어진 문자열 끝이 "ly"로 끝나면 true를 반환해라 - 2가지 방법!

public boolean endsLy(String str) { return java.util.regex.Pattern.matches(".*?ly",str); }

public boolean endsLy(String str) { if(str.length() >= 2){ if(str.charAt(str.length()-2) == 'l' && str.charAt(str.length()-1) == 'y'){ return true; } } return false; }

17. nTwice

주어진 문자열을 문자열 앞 n만큼 + 문자열 뒤 n만큼, 입력받은 정수형 n만큼 앞뒤를 잘라 출력해라

(ex. str: Hello, word : 2 => Helo)

public String nTwice(String str, int n) { return str.substring(0,n) + str.substring(str.length()-n); }

18. twoChar

주어진 문자열을 주어진 정수형부터 끝까지 출력해라. 만약 주어진 정수형이 주어진 문자열길이보다 작거나 더 크면, 주어진 문자열 앞 2개의 문자들을 출력해라.

public String twoChar(String str, int index) { if((str.length()-2 < index) || (index < 0)){ return str.substring(0,2); } return str.substring(index, index+2); }

19. middleThree

주어진 홀수길이의 문자열의 가운데 3개문자들을 출력해라.(str: candy => and)

public String middleThree(String str) { return str.substring(str.length()/2-1, str.length()/2+2); }

20. hasBad

주어진 문자열에서 인덱스 길이 0부터 혹은 1부터 시작해 "bad"문자열 나타난다면 true반환. - 2가지방법

public boolean hasBad(String str) { return java.util.regex.Pattern.matches(".?bad.*?",str); }

public boolean hasBad(String str) { String s = ""; String s2 = ""; if(str.length() >= 3 ){ s = str.substring(0,3); } if(str.length() > 3) { s2 = str.substring(1,4); } return s.equals("bad") || s2.equals("bad"); }

21. atFirst

주어진 문자열로 길이가 2인 문자열을 만들어라. 길이가 2이상이면 앞 2자리를 반환하고, 2보다 작은 문자열의 경우 @으로 채워서 반환해라.

public String atFirst(String str) { if(str.length() == 0){ return "@@"; } if(str.length() < 2){ return str + "@"; } return str.substring(0,2); }

22. lastChars

주어진 두개의 문자열 a,b에서 a문자열의 가장 앞글자와 b문자열 가장 뒷글자를 합쳐 출력해라.

만약 a나 b가 비어있는 문자열이라면 @을 채워서 출력해라.

public String lastChars(String a, String b) { if(a.equals("") || b.equals("")){ if(a.equals("") && b.equals("")){ return "@@"; }else if(a.equals("")){ return "@" + b.charAt(b.length()-1); }else{ return a.substring(0,1) + "@"; } } return a.substring(0,1) + b.charAt(b.length()-1); }

23. conCat

주어진 두개의 문자열을 합쳐라. 만약 첫번째 문자열의 마지막 문자와 두번째 문자열의 첫번째 문자가 같은 문자라면, 같은 문자중 하나만 출력해서 합쳐라.

public String conCat(String a, String b) { if(!a.equals("") && !b.equals("")){ if(a.substring(a.length()-1).equals(b.substring(0,1))){ return a + b.substring(1,b.length()); } } return a+b; }

24. lastTwo

주어진 문자열의 마지막 2개의 문자들을 서로 바꿔서 출력해라. ex)"coding" -> "codign"

public String lastTwo(String str) { if(str.length() > 2){ return str.substring(0,str.length()-2) + str.charAt(str.length()-1) + str.charAt(str.length()-2); } if(str.length() == 2){ return str.substring(str.length()-1) + str.charAt(str.length()-2); } return str; }

25. seeClolor

주어진문자열이 "red"나 "blue"로 시작한다면 색깔 문자열을 출력하고, 그렇지 않으면 빈 문자열 출력해라

public String seeColor(String str) { if(str.length() > 2){ if(str.substring(0,3).equals("red")){ return "red"; } } if(str.length() > 3){ if(str.substring(0,4).equals("blue")){ return "blue"; } } return ""; }

26. frontAgain

주어진 문자열의 처음 2번째문자들과 끝에서 2번째 문자들이 같으면 true를 출력

public boolean frontAgain(String str) { if(str.length()>1){ if(str.substring(0,2).equals(str.substring(str.length()-2))){ return true; } } return false; }

27. minCat

두개의 문자열 a,b가 주어지면 둘중에 작은 문자열 길이 만큼 양쪽의 문자열을 출력, but 길이가 더 작은 문자열은 전부 출력하고, 길이가 긴 문자열은 문자열앞쪽부터x, 뒤쪽기준으로 길이가 짧은 문자열 길이만큼 출력해라.

ex) a : "hello", b : "hi" ==> "lohi"

public String minCat(String a, String b) { if(a.length() > b.length()){ return a.substring(a.length()-b.length()) + b; } if(b.length() > a.length()){ return a + b.substring(b.length()-a.length()); } return ""; }

28. extraFront

주어진 문자열의 앞 2글자를 세번 반복해서 출력해라. 만약 주어진 문자열의 길이가 2보다 작다면 그 문자열을 3번 반복해서 출력해라.

public String extraFront(String str) { if(str.length() > 1){ return str.substring(0,2) + str.substring(0,2) + str.substring(0,2); } return str + str + str; }

29. without2

주어진문자열의 앞 2글자 뒤2글자가 같다면, 시작 2개문자들 삭제해 출력해라. 만약 문자열길이가 2글자면 앞에서 2글자 뒤에서 2글자 같아 overlap되기때문에 ""빈문자열을 출력해라. 그외의 것들은 변환하지 말고 그대로 출력해라.

public String without2(String str) { if((str.length() > 2) && str.substring(0,2).equals(str.substring(str.length()-2))){ return str.substring(2); } if(str.length() == 2){ return ""; } return str; }

30. deFront

주어진 문자열의 앞 2개의 문자들을 제외하고 출력해라. 단, 첫번째 문자가 'a'면 첫번째 문자 제외하지말것, 두번째 문자가 'b'이면 두번째 문자 제외하지 말것.

ex)str: java -> va, str: away -> aay , str: abc -> abc, str: xbc -> bc

public String deFront(String str) { if(str.charAt(0) == 'a' || str.charAt(1)== 'b'){ if(str.charAt(0) != 'a'){ return str.substring(1); }else if(str.charAt(1) != 'b'){ return str.charAt(0) + str.substring(2); } return str; } return str.substring(2); }

31. startWord

두개의 str과 word문자열이 주어진다. 두개의 문자열 중 짧은 문자열이 긴문자열과 같다면 match라고 함. (but여기서 문자열중 첫번째 문자는 달라도 같다고 함.) 만약 두개의 문자열에서 match일어나면 긴문자열의 match한 부분 출력.

만약 match가 일어나지 않았다면 ""빈 문자열 출력.

ex) str : hip, word : xip --> hip (match일어남), str : hippo, word : hi --> hi

public String startWord(String str, String word) { if(str.length()>= word.length()){ for(int i = 0; i < word.length(); i++){ if(str.substring(1,word.length()).equals(word.substring(1))){ return str.substring(0,word.length()); } } } return ""; }

32. withoutX

주어진 문자열에서 만약 맨앞 혹은 맨뒤 문자가 'x'라면, 맨앞 혹은 맨뒤 'x'문자 제외해서 출력해라. 그렇지 않으면 그대로 문자열을 출력해라.

public String withoutX(String str) { if(str.length() > 1){ if(str.charAt(0) == 'x'){ if(str.charAt(str.length()-1) == 'x'){ return str.substring(1,str.length()-1); }else{ return str.substring(1); } } if(str.charAt(str.length()-1) == 'x'){ return str.substring(0,str.length()-1); }else{ return str; } } return ""; }

33. withoutX2

만약 주어진 문자열에서 처음 문자가 'x'거나 2번째 문자가 'x' 혹은 둘다 'x'일경우 'x'문자는 제외하고 문자열을 출력할것.

public String withoutX2(String str) { if(str.length() != 0){ if(str.charAt(0) == 'x'){ if((str.length() > 1) && (str.charAt(1) == 'x')){ return str.substring(2); }else{ return str.substring(1); } } if((str.length() > 1) && (str.charAt(1) == 'x')){ return str.charAt(0) + str.substring(2); } } return str; }

from http://shinny.tistory.com/36 by ccl(A) rewrite - 2021-09-28 00:01:40