JavaRush /Java Blog /Random-KO /문자열 클래스
articles
레벨 15

문자열 클래스

Random-KO 그룹에 게시되었습니다
  • 행동 양식
  • 임의의 문자열 생성
  • 문자열 비교: equals()또는 ==?
이 클래스는 String프로그래머들이 매우 자주 사용하므로 잘 배워야 합니다. 클래스 문자열 - 1클래스 객체는 String불변이라는 점을 기억하세요. 따라서 문자열을 변경한다고 생각하면 실제로는 새 문자열을 만드는 것입니다. Java에는 문자열을 변경할 수 있는 StringBuffer특수 클래스가 있습니다 . StringBuilder클래스는 Stringjava.lang 패키지 에 정의되어 StringBuffer있으며 가져오기 선언 없이 자동으로 사용할 수 있습니다. 세 클래스 모두 인터페이스를 구현합니다 . 문자열을 만드는 것은 매우 간단합니다. 예를 들어 다음과 같이 할 수 있습니다. StringBuilderCharSequence
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클래스 객체에서 클래스 객체를 만들 수 있습니다 .StringBufferStringBuilder
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)); // возвращает 1105
public int codePointBefore(int index) 주어진 인덱스 앞에 오는 유니코드 문자를 반환합니다.
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end)start위치 와 위치 사이의 유니코드 문자 수를 계산합니다.end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
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("котёнок")); // возвращает -32
}
버블 정렬을 사용하여 문자열 배열을 정렬해 보겠습니다.
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)
제공된 형식과 지정된 범위에 지역화된 인수를 사용하여 형식화된 문자열을 반환합니다. 예를 들어 날짜나 시간
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
새 줄에 나타나는 두 단어를 붙입니다. 이 경우 두 번째 단어는 대문자로 표시됩니다.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
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);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
대문자로 사용하려면 %Xff됩니다 FF. 십진법 사용의 경우 %d. 날짜는 다양한 방식으로 표시될 수도 있습니다.
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
		String.format(locale, "%tD\n", now) + // (MM/DD/YY)
		String.format(locale, "%tF\n", now) + // (YYYY-MM-DD)
		String.format(locale, "%tr\n", now) + // Full 12-hour time
		String.format(locale, "%tz\n", now) + // Time zone GMT offset
		String.format(locale, "%tZ\n", now)); // Localized time zone bbreviation
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 = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) 위치에서 시작하여 인덱스를 조회합니다.start
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
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()) {
    // здесь ваш code
}
이 메서드는 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())); // возвращает 7 (семь символов)
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*", ""); // останется 1234-cat
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. 새 줄에는 문자가 start1개부터 끝까지 포함되므로 문자를 하나 더 사용합니다.
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));
// попробуйте и другие варианты
// infoTextView.setText(s1 + " equals " + s2 + ": " + (s1.equals(s2)));
// infoTextView.setText(s1 + " == " + s3 + ": " + (s1 == s3));
// infoTextView.setText(s1 + " equals " + s3 + ": " + (s1.equals(s3)));
// infoTextView.setText(s1 + " == " + s4 + ": " + (s1 == s4));
// infoTextView.setText(s1 + " equals " + s4 + ": " + (s1.equals(s4)));
// infoTextView.setText(s1 + " == " + s5 + ": " + (s1 == s5)); // false
// infoTextView.setText(s1 + " equals " + s5 + ": " + (s1.equals(s5)));
// infoTextView.setText(s1 + " == " + s6 + ": " + (s1 == s6)); // false
// infoTextView.setText(s1 + " equals " + s6 + ": " + (s1.equals(s6)));
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION