- 행동 양식
- 임의의 문자열 생성
- 문자열 비교:
equals()
또는 ==
?
이 클래스는
String
프로그래머들이 매우 자주 사용하므로 잘 배워야 합니다.
클래스 객체는
String
불변이라는 점을 기억하세요. 따라서 문자열을 변경한다고 생각하면 실제로는 새 문자열을 만드는 것입니다. Java에는 문자열을 변경할 수 있는
StringBuffer
특수 클래스가 있습니다 .
StringBuilder
클래스는
String
java.lang
패키지 에 정의되어
StringBuffer
있으며 가져오기 선언 없이 자동으로 사용할 수 있습니다. 세 클래스 모두 인터페이스를 구현합니다 . 문자열을 만드는 것은 매우 간단합니다. 예를 들어 다음과 같이 할 수 있습니다.
StringBuilder
CharSequence
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
문자열 배열을 만들 수 있습니다.
String[] cats = {"Васька", "Barsik", "Murzik"};
빈 클래스 객체를 만들 수 있습니다
String
.
String str = new String();
문자 배열을 통해 문자열을 만들 수 있습니다.
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
문자 배열의 범위를 설정할 수 있는 생성자도 있습니다. 범위의 시작과 사용할 문자 수를 지정해야 합니다.
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
다음 생성자를 사용하여
String
클래스 객체에서 클래스 객체를 만들 수 있습니다 .
StringBuffer
StringBuilder
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)
연산자 +
및 +=String
Java에서 더하기 기호(
+
)는 문자열 연결, 즉 문자열을 결합하는 것을 의미합니다.
String cat = "Кот";
String name = "Васька";
String fullname = cat + " " + name;
표현식의 피연산자 중 하나에 문자열이 포함되어 있으면 다른 피연산자도 문자열이어야 합니다. 따라서 Java 자체는 변수가 문자열이 아니더라도 문자열 표현으로 변환할 수 있습니다.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws;
За кулисами Java за нас преобразовало число 4 в строку "4"
문자열 서식 지정
문자열 리소스가 있다고 가정해 보겠습니다.
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
이 문자열을 요소에 프로그래밍 방식으로 표시하려면
TextView
다음 코드를 사용할 수 있습니다.
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
고양이가 여러 마리 있다고 상상해보십시오. 물론 각 고양이마다 자신만의 라인을 가질 수도 있습니다. 하지만 대사는 매우 유사하며 이름과 나이만 변경됩니다. 발과 꼬리의 수를 변경할 수도 있습니다(무엇을 피우시나요?). 이러한 경우 문자열 서식을 적용할 수 있습니다. 변경할 단어를 결정하고 이를 퍼센트 기호로 시작하고 1씩 증가하는 숫자,
$s
문자열 또는
$d
숫자로 시작하는 특수 문자 세트로 대체해야 합니다. 문자열 리소스를 다음과 같이 변경해 보겠습니다.
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
코드를 변경해 보겠습니다.
String strBarsik = "Barsik";
String strPaws = "четыре";
String strTail = "one";
int year = 5;
String strCats = getResources().getString(R.string.aboutcat);
String strFinal = String.format(strCats, strBarsik, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
고양이 Vaska가 있고 6살이라면 두 개의 변수를 추가하고 행의 형식을 지정하십시오.
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
다음은 간단한 형식 지정 예입니다. 꼭 기억해 두시고 올바른 곳에 활용하세요.
문자열 리소스
문자열을 리소스에 저장하는 것이 좋습니다. 프로그래밍 방식으로 문자열 리소스에 액세스하는 방법은 다음과 같습니다.
String catName = getResources().getString(R.string.barsik);
리소스의 문자열 배열에서 문자열 추출
strings.xml 파일 에 문자열 배열이 정의되어 있다고 가정해 보겠습니다
cats_array
. 그런 다음 다음과 같이 리소스의 행에 액세스할 수 있습니다.
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);
행동 양식
public char charAt (int index)
이 문자열에서 지정된 오프셋에 있는 문자를 반환합니다. 카운트다운은 0부터 시작됩니다. 음수나 존재하지 않는 값을 사용할 필요는 없습니다. 더 심각하게 생각하세요. 여러 문자를 추출하려면
getChars()
.
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar));
public int codePointAt(int index)
주어진 인덱스에 있는 유니코드 문자를 반환합니다.
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar));
public int codePointBefore(int index)
주어진 인덱스 앞에 오는 유니코드 문자를 반환합니다.
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar));
public int codePointCount(int start, int end)
start
위치 와 위치 사이의 유니코드 문자 수를 계산합니다.
end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar));
public int compareTo(String string)
유니코드 문자 값을 사용하여 지정된 문자열을 비교하고 어떤 문자열이 다음 문자열보다 작거나 같거나 큰지 계산합니다. 정렬에 사용할 수 있습니다. 사례가 고려됩니다. 문자열이 일치하면 0이 반환되고, 0보다 작으면 호출 문자열은 string보다 작고
string
, 0보다 크면 호출 문자열은 string보다 큽니다
string
. 대문자 단어는 소문자 단어 위에 배치됩니다.
String testString = "Котёнок";
if (testString.compareTo("котёнок") == 0) {
tvInfo.setText("Строки равны");
} else {
tvInfo.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
버블 정렬을 사용하여 문자열 배열을 정렬해 보겠습니다.
String[] poem = { "Мы", "везём", "с", "собой", "кота" };
for (int j = 0; j < poem.length; j++) {
for (int i = j + 1; i < poem.length; i++) {
if (poem[i].compareTo(poem[j]) < 0) {
String temp = poem[j];
poem[j] = poem[i];
poem[i] = temp;
}
}
System.out.println(poem[j]);
}
결과적으로 우리는 다음을 얻습니다:
Мы
везём
кота
с
собой
보시다시피,
용어의 위치를 변경해도 고양이의 정렬 합계는 변경되지 않습니다.
public int compareToIgnoreCase (String string)
대소문자를 구분하지 않고 유니코드 문자 값을 사용하여 지정된 문자열을 비교합니다.
String testString = "Котёнок";
if (testString.compareToIgnoreCase("котёнок") == 0) {
tv.setText("Строки равны");
} else {
tv.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
public String concat (String string)
문자열을 지정된 문자열과 연결합니다. 두 문자열의 연결을 포함하는 새 문자열이 반환됩니다. 메소드 이름 자체에 고양이가 포함되어 있다는 점에 유의하세요!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
메소드는 연산자와 동일한 기능을 수행하며
+
작성될 수 있습니다
Сук + кот
. 그러나 진짜 고양이를 좋아하는 사람은 "고양이" 방법을 사용할 것입니다.
public boolean contains (CharSequence cs)
문자열에 일련의 문자가 포함되어 있는지 확인합니다.
CharSequence
String testString = "котёнок";
if(testString.contains("кот")){
infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length)
length 길이Data
의 위치
start
(0부터 시작하는 번호 매기기) 에서 시작 하는 배열에서 지정된 문자를 포함하는 새 문자열을 만듭니다 . 지정된 배열의 문자를 포함하는 새 문자열을 만듭니다. 행이 생성된 후 배열을 변경해도 생성된 행은 변경되지 않습니다. 문자열이 로 끝나는지 확인합니다 .
public static String copyValueOf(char[] data)
public boolean endsWith(String suffix)
suffix
String str1 = "Суккот";
if(str1.endsWith("кот"))
infoTextView.setText("Слово заканчивается на котике");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string)
지정된 객체와 문자열을 비교하고 비교된 문자열이 같으면
true를 반환합니다. 즉, 동일한 문자를 포함하고 동일한 대소문자 구분 순서를 따릅니다.
String str1 = "Кот";
String str2 = "Кошка";
if(str1.equals(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
==
이 메서드는 두 개체 참조를 비교하여 동일한 인스턴스를 참조하는지 확인하는 연산자와 혼동하지 마십시오 . 문자열 비교를 참조하세요:
equals()
또는
==
?
public boolean equalsIgnoreCase(String string)
지정된 문자열을 소스 문자열과 대소문자를 구분하지 않고 비교하고 같으면
true를 반환합니다 . AZ 범위는 az 범위와 동일한 것으로 간주됩니다.
String str1 = "Кот";
String str2 = "кот";
if(str1.equalsIgnoreCase(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
제공된 형식과 지정된 범위에 지역화된 인수를 사용하여 형식화된 문자열을 반환합니다. 예를 들어 날짜나 시간
String.format("%.2f", floatValue);
새 줄에 나타나는 두 단어를 붙입니다. 이 경우 두 번째 단어는 대문자로 표시됩니다.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
infoTextView.setText(strResult);
숫자를 8진수 시스템으로 변환합니다.
String str1 = "8";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);
infoTextView.setText(strResult);
비유하자면 16진법으로 표시합니다.
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
infoTextView.setText(strResult);
대문자로 사용하려면
%X
가
ff
됩니다
FF
. 십진법 사용의 경우
%d
. 날짜는 다양한 방식으로 표시될 수도 있습니다.
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
String.format(locale, "%tD\n", now) +
String.format(locale, "%tF\n", now) +
String.format(locale, "%tr\n", now) +
String.format(locale, "%tz\n", now) +
String.format(locale, "%tZ\n", now));
public byte[] getBytes(String charsetName)
제공된 형식을 사용하여 형식화된 문자열을 반환합니다.
public void getBytes(int start, int end, byte[] data, int index)
및 기타 오버로드 이 메서드는
getChars()
. 다른 유니코드 문자를 사용하는 다양한 소스에서 문자열을 내보낼 때 자주 사용됩니다. 예를 들어, Java는 기본적으로 16비트 유니코드 문자로 작동하며 인터넷에서는 문자열이 8비트 유니코드, ASCII 등을 사용하는 경우가 많습니다.
public void getChars(int start, int end, char[] buffer, int index)
문자열에서 여러 문자를 추출하는 방법입니다.
start
하위 문자열의 시작 부분의 인덱스( ), 추출할 하위 문자열의 끝 뒤에 오는 문자의 인덱스( end )를 지정해야 합니다 . 선택한 문자를 받는 배열은
buffer 매개변수에 있습니다 . 하위 문자열이 기록되기 시작하는 배열의 인덱스는
index 매개 변수에 전달됩니다 . 배열이 지정된 하위 문자열의 모든 문자를 포함할 만큼 충분히 큰지 확인하십시오.
String unusualCat = "Котёнок по имени Гав";
int start = 5;
int end = 12;
char[] buf = new char[end - start];
unusualCat.getChars(start, end, buf, 0);
infoTextView.setText(new String(buf));
public int hashCode()
이 개체의 해시 코드인 정수를 반환합니다.
public int indexOf(int c)
지정된 인덱스 c를 사용하여 처음 발견된 위치의 번호를 반환합니다.
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start)
위치에서 시작하여 인덱스를 조회합니다.
start
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string)
문자열을 검색합니다.
subString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)
subString
위치에서 시작하는 문자열을 검색합니다.
start
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern ()
문자열을 "해시"합니다.
public boolean isEmpty ()
문자열이 비어 있는지 확인합니다.
if(catname.isEmpty()) {
}
이 메서드는 API 9(Android 2.1)에 나타났습니다. 이전 장치의 경우
String.length() == 0
public int lastIndexOf (String string) и другие перегруженные версии
지정된 인덱스에서 마지막으로 발견된 위치의 번호를 반환합니다. 예를 들어 다음과 같이 확장자 없이 파일 이름을 얻을 수 있습니다.
filename.toString().substring(0, filename.getString().lastIndexOf("."));
이 예에서는 마지막 지점의 위치를 가져오고 그 앞의 하위 문자열을 가져옵니다.
public int length()
문자열의 길이를 반환합니다.
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length()));
public boolean matches(String regularExpression)
문자열이 정규식과 일치하는지 확인합니다.
public int offsetByCodePoints (int index, int codePointOffset)
codePointOffset
매개변수에 지정된 시작 위치로부터 일정 거리만큼 떨어진 위치를 반환하며 ,
index
public boolean regionMatches (int thisStart, String string, int start, int length)
문자열의 지정된 부분과 문자열의 다른 부분을 비교하는 메소드입니다. 클래스 호출 객체의 행 범위 시작 부분의 인덱스를 지정해야 합니다
String
. 비교할 문자열이 매개변수에 전달됩니다
string
. 매개변수에는 비교를 수행해야 하는 시작 문자의 인덱스가 전달되고
start
, 비교할 부분 문자열의 길이가 매개변수에 전달됩니다
length
.
public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length)
오버로드된 버전입니다. 이 메서드는 대소문자를 무시하고 문자열의 지정된 부분을 문자열의 다른 부분과 비교합니다.
public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии
문자 또는 문자 순서를
target
다음으로 변경합니다.
replacement
String testString = "whale";
infoTextView.setText(testString.replace("And", "о"));
public String replaceAll (String regularExpression, String replacement)
public String replaceFirst (String regularExpression, String replacement)
정규식을 사용하여 첫 번째 문자를 제거합니다. 예를 들어, 숫자 001, 007, 000024의 시작 부분에서 0을 제거해야 하는 경우 이 호출을 사용할 수 있습니다.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", "");
public String[] split (String regularExpression) и другие перегруженные версии
문자열을 단어 배열로 분할합니다. 예를 들어 Vaska Ryzhik Murzik Barsik이라는 문자열이 있고 고양이 이름의 배열을 얻으려고 합니다.
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");
우리는 다음을 얻습니다:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix)
prefix
문자열이 문자열의 시작 부분부터 문자로 시작하는지 확인합니다.
String str1 = "котлета";
if(str1.startsWith("кот"))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start)
주어진 문자열이
prefix
지정된 위치의 문자로 시작하는지 확인합니다.
String str1 = "Суккот";
if(str1.startsWith("кот", 3))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end)
방법과 비슷
substring()
하지만 에 사용할 수 있습니다
CharSequence
.
public String substring(int start)
및 기타 오버로드 position 에서 시작하여 줄
start
끝까지/position 의 문자로 끝나는 지정된 문자열의 문자로 새 시퀀스/문자열을 만듭니다
end
. 새 줄에는 문자가
start
1개부터 끝까지 포함되므로 문자를 하나 더 사용합니다.
String testString = "скотина";
infoTextView.setText(testString.substring(1, 4));
public char[] toCharArray()
이 문자열의 문자를 문자 배열에 복사합니다. 를 통해서도 동일한 결과를 얻을 수 있습니다
getChars()
. 문서에서는 이 방법을 사용하는 것을 권장하지 않으며
charAt()
.
String unusualCat = "Котёнок по имени Гав";
char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии
문자열을 소문자로 변환합니다. 기본 로캘이 변환을 제어합니다. 문자열 고양이 = "고양이"; 문자열 lower = cat.toLowerCase(); infoTextView.setText(lower);
public String toString ()
문자열을 반환합니다. 그 자체가 이미 문자열인 문자열 자체의 경우 문자열을 반환하는 것은 의미가 없습니다(오, 내가 어떻게 구부렸는지). 하지만 이 방법은 실제로 다른 클래스에 매우 유용합니다.
public String toUpperCase()
문자열을 대문자로 변환합니다. 기본 로캘이 변환을 제어합니다.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim()
문자열의 시작과 끝에서 공백을 제거합니다.
String str = " Hello Kitty ".trim();
infoTextView.setText(str);
public static String valueOf(long value)
및 기타 오버로드 내용(숫자, 개체, 문자, 문자 배열)을 문자열로 변환합니다.
int catAge = 7;
infoTextView.setText(String.valueOf(catAge));
임의의 문자열 생성
주어진 문자로 구성된 임의의 문자열이 필요하다고 가정해 보겠습니다.
private static final String mCHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
private static final int STR_LENGTH = 9;
Random random = new Random();
public void onClick(View view) {
TextView infoTextView = (TextView) findViewById(R.id.textViewInfo);
infoTextView.setText(createRandomString());
}
public String createRandomString() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < STR_LENGTH; i++) {
int number = random.nextInt(mCHAR.length());
char ch = mCHAR.charAt(number);
builder.append(ch);
}
return builder.toString();
}
문자열 비교: equals()
또는 ==
?
예를 살펴보겠습니다.
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;
infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
두 변수에 동일한 단어가 포함되어 있지만 우리는 두 개의 다른 객체를 다루고 있으며 연산자는
false를==
반환합니다 . 한번은 트리가 커졌을 때 서로 다른 소스의 두 문자열을 비교해야 했습니다. 문자열은 완전히 동일해 보였지만 연산자를 사용한 비교에서는
false가 반환되어 모든 카드가 혼란스러워졌습니다. 그리고 나서야 . Java의 문자열은 문자열의 출력이 화면에서 동일하게 보일 수 있지만 다른 객체와 동일하지 않을 수 있는 별도의 객체입니다. 논리 연산자 (및 ) 의 경우 Java는 객체에 대한 참조를 비교합니다(기본 형식으로 작업할 때는 이러한 문제가 없습니다).
==
equals()
==
!=
String s1 = "hello";
String s2 = "hello";
String s3 = s1;
String s4 = "h" + "e" + "l" + "l" + "o";
String s5 = new String("hello");
String s6 = new String(new char[]{'h', 'e', 'l', 'l', 'o'});
infoTextView.setText(s1 + " == " + s2 + ": " + (s1 == s2));
GO TO FULL VERSION