JavaRush /Блоги Java /Random-TG /Java String. Саволҳо ва ҷавобҳои мусоҳиба, қисми 1
Andrey
Сатҳи

Java String. Саволҳо ва ҷавобҳои мусоҳиба, қисми 1

Дар гурӯҳ нашр шудааст
Синф Stringяке аз синфҳои маъмултарин дар Java мебошад. Ин мақола якчанд саволҳо ва ҷавобҳои мусоҳибаи Java String муҳимро пешниҳод мекунад. Java String.  Саволҳо ва ҷавобҳои мусоҳиба, қисми 1 - 1Онҳо барои гирифтани тасвири пурраи синф хеле муфид хоҳанд буд Stringва шуморо ба ҳама гуна саволҳои мусоҳибаи марбут ба синф омода мекунанд String.

1. String дар Java чист? Ин кадом намуди маълумот аст?

Сатр як синф дар Java мебошад, ки дар бастаи java.lang муайян карда шудааст. Ин як намуди ибтидоии додаҳо ба монанди int ва long нест. Синфи String маҷмӯи аломатҳои сатрро ифода мекунад. Сатрҳо тақрибан дар ҳама замимаҳои Java истифода мешаванд ва чанд далеле ҳастанд, ки мо бояд дар бораи синфи String донем. Ин як immutableнавъи додаҳои тағирнашаванда ( ) ва ниҳоӣ дар Java мебошад ва Stringмошини виртуалӣ ҳамаи an objectҳои синфро дар ҳавзи сатр нигоҳ медорад. Хусусияти дигар Stringин роҳи ба даст овардани an objectҳои синфӣ Stringбо истифода аз нохунакҳои дукарата ва пурборкунии оператори "+" барои пайвастшавӣ мебошад.

2. Роҳҳои гуногуни сохтани an objectи String кадомҳоянд?

Мо метавонем бо истифода аз оператори нав an objectҳоро мисли ҳама синфҳои дигари Java эҷод кунем ё мо метавонем нохунакҳои дукаратаро барои сохтани an object истифода барем String. StringИнчунин якчанд конструкторҳои синф барои гирифтани сатр аз массиви аломатҳо, массиви byteҳо ва инчунин бо истифода StringBufferаз ё вуҷуд доранд StringBuilder.
String str = new String("abc");
String str1 = "abc";
Вақте ки мо бо истифода аз нохунакҳои дукарата сатр эҷод мекунем, Мошини виртуалии Java дар ҳавзи сатр барои сатри дигар бо ҳамон арзиш назар мекунад. Агар сатр ёфт шавад, он гоҳ танҳо истинод ба an objectи мавҷудаи синф баргардонида мешавад String, вагарна an objectи нав бо арзиши гирифташуда сохта мешавад ва дар ҳавз нигоҳ дошта мешавад. Вақте ки мо оператори навро истифода мебарем, мошини виртуалӣ an object эҷод мекунад String, аммо онро дар ҳавзи сатр нигоҳ намедорад. Мо метавонем ин усулро intern()барои нигоҳ доштани сатр дар ҳавзи сатр истифода барем ё истинод гиред, агар чунин сатр аллакай дар ҳавз бошад.

3. Усули тафтиши палиндром будани сатрро нависед.

Агар сатр дар ҳар ду самт якхела бошад, палиндром номида мешавад. Масалан, "аба" сатри палиндромӣ аст. Синф Stringягон усули баргардонидани сатрро пешниҳод намекунад, аммо дарсҳо усули баргардонӣ StringBufferдоранд StringBuilder, ки бо он мо метавонем тафтиш кунем, ки сатри мо палиндром аст ё не.
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
Баъзан мусоҳиба метавонад хоҳиш кунад, ки барои ин санҷиш дигар синфҳоро истифода набарад, дар ин ҳолат мо метавонем аломатҳои сатри ҳарду ҷонибро муқоиса кунем, то палиндромро тафтиш кунем.
private static boolean isPalindromeString(String str) {
        if (str == null)
            return false;
        int length = str.length();
        System.out.println(length / 2);
        for (int i = 0; i < length / 2; i++) {

            if (str.charAt(i) != str.charAt(length - i - 1))
                return false;
        }
        return true;
    }

4. Усули аз сатр хориљ кардани аломати додашударо нависед.

Мо метавонем усулеро истифода барем replaceAll, то ҳама рӯйдодҳои сатрро бо сатри дигар иваз кунем. Аҳамият диҳед, ки усул сатрро ҳамчун аргумент мегирад, аз ин рӯ мо синфро Characterбарои сохтани сатр аз аломат истифода мебарем ва онро барои иваз кардани ҳамаи аломатҳо бо сатри холӣ истифода мебарем.
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. Чӣ тавр сатрро ба ҳарфи калон ё хурд табдил додан мумкин аст?

Мо метавонем усулҳои синфро String toUpperCaseбарои toLowerCaceба даст овардани сатрҳои калон ва хурд истифода барем. Ин усулҳо дорои сарбории изофӣ мебошанд, ки аргумент мегиранд Localeва қоидаҳои маҳаллисозии онро барои табдил додани сатр ба ҳарфи калон ё хурд истифода мебаранд.

6. Усули SubSequence чӣ кор мекунад?

Java 1.4 интерфейсро муаррифӣ кард CharSequence, синф Stringин интерфейсро мерос мегирад ва ин ягона сабаби татбиқи усул subSequenceдар синф аст String. Дар дохor он даъват мекунад substring. Намунаи оддии истифодаи усул:
public class StringSubsequence {

    public static void main(String[] args) {
        String str = "www.journaldev.com";
        System.out.println("Last 4 char String: "+str.subSequence(str.length()-4, str.length()));
        System.out.println("First 4 char String: "+str.subSequence(0, 4));
        System.out.println("website name: "+str.subSequence(4, 14));

        //substring vs subSequence
        System.out.println("substring == subSequence ? "
			+(str.substring(4, 14) == str.subSequence(4, 14)));

        System.out.println("substring equals subSequence ? "
			+(str.substring(4, 14).equals(str.subSequence(4, 14))));
    }
}
Натиҷаи барнома инҳоро нишон медиҳад:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Идеалӣ шумо бояд ҳамеша истифода баред substring.

7. Чӣ тавр ду сатрро дар Java муқоиса кардан мумкин аст?

Синф Stringинтерфейсро мерос мегирад Comparableва ду варианти метод дорад compareTo(). Усули лексикографӣ compareTo(String anotherString)an objectро Stringбо далели гирифташуда муқоиса мекунад String. Агар сатри ҷорӣ пеш аз сатри қабулшуда бошад, усул адади манфиро бармегардонад ва агар сатр аз далели қабулшуда пайравӣ кунад, адади мусбатро бармегардонад integer. Агар усул 0-ро баргардонад, сатр ҳамон арзиш дорад, дар ин ҳолат метод equals(String str)низ ҳақиқиро бармегардонад. compareToIgnoreCase(String str): Ин усул ба усули қаблӣ монанд аст, ба истиснои он, ки он парвандаро сарфи назар мекунад. Он CASE_INSENSITIVE_ORDER Муқоисакунандаро барои муқоисаи ба ҳарфҳои хурд-ҳассос истифода мебарад. Агар арзиши баргардонидан сифр бошад, он гоҳ усул equalsIgnoreCase(String str)низ ҳақиқиро бармегардонад. Биёед як мисоли хурдеро дида бароем, то ин усулҳоро шарҳ диҳад:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
Барнома инҳоро мебарорад:
-3
0

8. Чӣ тавр сатрро ба аломат ва баръакс табдил додан мумкин аст?

Ин саволи ҳиллаест, зеро сатр пайдарпаии аломатҳост, бинобар ин мо метавонем онро танҳо ба як аломат табдил диҳем. Мо метавонем усулеро charAtбарои ба даст овардани аломати дар ҷои муайян ҷойгиршуда истифода барем ё мо метавонем усули toCharArray()табдил додани сатрро ба массиви аломатҳо истифода барем. Мисоли оддӣ нишон медиҳад, ки чӣ гуна табдил додани сатр ба аломат ва аломат ба сатр дар Java.
import java.util.Arrays;

public class StringToCharToString {
    public static void main(String[] args) {
        //String to char array
        String str = "123";
        char[] chArr = str.toCharArray();
        System.out.println("String to char array: "+Arrays.toString(chArr));
        //String to char
        char c = str.charAt(1);
        System.out.println("String to char: "+c);
        //char to String
        String s = Character.toString(c);
        System.out.println("char to String: "+s);
        //удалить все заданные символы из строки
        System.out.println("removing all chars from String: "
                                 +removeCharFromString("1ABCD12DW", '1'));
    }

    private static String removeCharFromString(String str, char c) {
        return str.replaceAll(Character.toString( c ), "");
    }
}
Барнома инҳоро мебарорад:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. Чӣ тавр сатрро ба массиви byteӣ ва баръакс табдил додан мумкин аст?

Мо метавонем усули getBytes()табдил додани сатрро ба массиви byte истифода барем ва мо метавонем конструкторро new String(byte[] arr)барои табдил додани масси byte ба сатр истифода барем.
import java.util.Arrays;

public class StringByteArray {
     public static void main(String[] args) {
        String str = "www.journaldev.com";
        //преобразование String в byte array
        byte[] byteArr = str.getBytes();
        System.out.println("String to byte array : "+Arrays.toString(byteArr));
        //преобразование byte array и String
        String str1 = new String(byteArr);
        System.out.println("byte array to String : "+str1);
        //посмотрим, str и str1 одинаковые or нет
        System.out.println("str == str1? " + (str == str1));
        System.out.println("str.equals(str1)? " + (str.equals(str1)));
    }
}
Барнома инҳоро мебарорад:
String to byte array : [119, 119, 119, 46, 106, 111, 117, 114, 110, 97, 108, 100, 101, 118, 46, 99, 111, 109]
byte array to String : www.journaldev.com
str == str1? false
str.equals(str1)? true

10. Оё мо метавонем сатрро дар сохти коммутатор истифода барем?

Ин саволи ҷолиб барои санҷиши дониши шумо дар бораи рушди кунунии забон истифода мешавад. Java 7 изҳороти гузаришро барои истифодаи сатр васеъ мекунад; versionҳои қаблии Java инро дастгирӣ намекунанд. Агар шумо ҷараёни шартиро барои сатрҳо амалӣ карда истода бошед, шумо метавонед шартҳои if-else-ро истифода баред ва шумо метавонед изҳороти гузаришро истифода баред, агар шумо Java 7 ё навтарро истифода баред. Намунаи хурди истифодаи сатр дар изҳорот switchва усули дигаре, ки мантиқи якхелаи истифодаи шартҳоро нишон медиҳад if-else.
public class SwitchStringExample {

    public static void main(String[] args) {
        printColorUsingSwitch("red");
        printColorUsingIf("red");
        // оператор switch регистрозависимый
        printColorUsingSwitch("RED");
        printColorUsingSwitch(null);
    }

    private static void printColorUsingIf(String color) {
        if (color.equals("blue")) {
            System.out.println("BLUE");
        } else if (color.equals("red")) {
            System.out.println("RED");
        } else {
            System.out.println("INVALID COLOR CODE");
        }
    }

    private static void printColorUsingSwitch(String color) {
        switch (color) {
        case "blue":
            System.out.println("BLUE");
            break;
        case "red":
            System.out.println("RED");
            break;
        default:
            System.out.println("INVALID COLOR CODE");
        }
    }
}
Барнома инҳоро мебарорад:
RED
RED
INVALID COLOR CODE
Exception in thread "main"
java.lang.NullPointerException
    at com.journaldev.util.SwitchStringExample.printColorUsingSwitch(SwitchStringExample.java:24)
    at com.journaldev.util.SwitchStringExample.main(SwitchStringExample.java:10)
Нуқтаҳои асосии истифода switchбарои сатрҳо дар Java.
  • истифодаи сатрҳо дар тарроҳӣ switchcodeро тавассути аз байн бурдани якчанд занҷирҳои шартҳо хондан бештар мекунад if-else.
  • сатрҳо ҳассос мебошанд switch, мисоли боло инро нишон медиҳад.
  • оператор switchусули String.equals()муқоисаи арзиши натиҷаро бо арзишҳои парванда истифода мебарад , аз ин рӯ чекро барои NULL илова кунед, то пешгирӣ кунед NullPointerException.
  • Тибқи ҳуҷҷатҳои Java 7 барои сатрҳо дар switch, компилятори Java барои сатрҳо дар сохтор switchназар ба шартҳои муттаҳидшуда bytecodeи муассиртар тавлид мекунад if-else.
  • боварӣ ҳосил кунед, ки ин бо Java 7 ё дертар истифода мешавад, вагарна шумо xception.

11. Барномае нависед, ки тамоми ивазшавии сатрро чоп мекунад.

Ин як саволи душвор аст ва мо бояд барои пайдо кардани ҳама ивазкунии сатр рекурсияро истифода барем, масалан ивазкунии "AAB" метавонад "AAB", "ABA" ва "BAA" бошад. Мо инчунин бояд Set-ро истифода барем, то боварӣ ҳосил кунем, ки мо сатрҳои такрорӣ надорем. Барои ба даст овардани ҳама ивазкунӣ, мо аввал аломати аввали сатрро мегирем ва аломатҳои боқимондаро аз нав ҷойгир мекунем. Агар Сатр = "ABC" Аломати аввал = A ва ивазкунии боқимондаи BC ва CB. Акнун мо метавонем аломати аввалро ба мавқеъҳои мавҷуда дар ивазкунӣ дохил кунем. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Барномаи намунавӣ:
import java.util.HashSet;
import java.util.Set;

public class StringHelper {
    public static Set<String> permutationFinder(String str) {
        Set<String> perm = new HashSet<String>();
        //Handling error scenarios
        if (str == null) {
            return null;
        } else if (str.length() == 0) {
            perm.add("");
            return perm;
        }
        char initial = str.charAt(0); // первый символ
        String rem = str.substring(1); // полная строка без первого символа
        Set<String> words = permutationFinder(rem);
        for (String strNew : words) {
            for (int i = 0;i<=strNew.length();i++){
                perm.add(charInsert(strNew, initial, i));
            }
        }
        return perm;
    }

    public static String charInsert(String str, char c, int j) {
        String begin = str.substring(0, j);
        String end = str.substring(j);
        return begin + c + end;
    }

    public static void main(String[] args) {
        String s = "AAC";
        String s1 = "ABC";
        String s2 = "ABCD";
        System.out.println("\nPermutations for " + s + " are: \n" + permutationFinder(s));
        System.out.println("\nPermutations for " + s1 + " are: \n" + permutationFinder(s1));
        System.out.println("\nPermutations for " + s2 + " are: \n" + permutationFinder(s2));
    }
}
Натиҷаи барнома:
Permutations for AAC are:
[AAC, ACA, CAA]

Permutations for ABC are:
[ACB, ABC, BCA, CBA, CAB, BAC]

Permutations for ABCD are:
[DABC, CADB, BCAD, DBAC, BACD, ABCD, ABDC, DCBA, ADBC, ADCB, CBDA, CBAD, DACB, ACBD, CDBA, CDAB, DCAB, ACDB, DBCA, BDAC, CABD, BADC, BCDA, BDCA]
Идомаи мақола
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION