Числа, Строки и Массивы

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В Java и других объектно-ориентированных языках объекты представляют собой коллекции связанных данных, которые сопровождаются набором методов. Эти методы работают с объектами, выполняют вычисления и иногда изменяют данные объекта. Здесь мы познакомим вас с тремя простыми, но важными встроенными типами объектов Java: Number, String и Array.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/StringManipulationGroup -.-> java/stringbuffer_stringbuilder("StringBuffer/StringBuilder") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("Wrapper Classes") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/data_types -.-> lab-178548{{"Числа, Строки и Массивы"}} java/for_loop -.-> lab-178548{{"Числа, Строки и Массивы"}} java/strings -.-> lab-178548{{"Числа, Строки и Массивы"}} java/stringbuffer_stringbuilder -.-> lab-178548{{"Числа, Строки и Массивы"}} java/arrays -.-> lab-178548{{"Числа, Строки и Массивы"}} java/arrays_methods -.-> lab-178548{{"Числа, Строки и Массивы"}} java/wrapper_classes -.-> lab-178548{{"Числа, Строки и Массивы"}} java/math_methods -.-> lab-178548{{"Числа, Строки и Массивы"}} java/string_methods -.-> lab-178548{{"Числа, Строки и Массивы"}} end

Number

По сути, мы используем примитивные типы чисел, такие как byte, int, double и т.д. Однако, иногда мы нуждаемся в использовании объектов вместо примитивных типов данных. Java предоставляет обертки для примитивных типов данных. Это Byte, Short, Long, Integer, Double, Float и т.д. Объект-обертку можно преобразовать обратно в примитивный тип данных. Этот процесс называется разупаковкой (unboxing). Класс Number является частью пакета java.lang. Пакеты будут обсуждаться позже.

Ниже приведен список некоторых общих методов класса, которые реализуют подклассы класса Number:

  • xxxValue(): Преобразует значение этого объекта Number в тип данных xxx и возвращает его.
  • compareTo(): Сравнивает этот объект Number с аргументом.
  • equals(): Определяет, равно ли этот объект Number аргументу.
  • valueOf(): Возвращает объект Integer, содержащий значение указанного примитивного типа.
  • toString(): Возвращает объект String, представляющий значение указанного int или Integer.
  • parseInt(): Этот метод используется для получения примитивного типа int из определенного значения String.
  • abs(): Возвращает абсолютное значение аргумента.
  • ceil(): Возвращает наименьшее целое число, которое больше или равно аргументу. Возвращается в виде double.
  • floor(): Возвращает наибольшее целое число, которое меньше или равно аргументу. Возвращается в виде double.
  • pow(): Возвращает значение первого аргумента, возведенного в степень второго аргумента.
  • round(): Возвращает long или int, ближайшее, как указано типом возврата метода, к аргументу.

Пример:

Напишите следующий код в файле /home/labex/project/numberTest.java:

public class numberTest
{
    public static void main(String[] args){
        Integer x = 1;    // упаковывает int в объект Integer
        x = x + 1;        // разупаковывает Integer в int
        System.out.println(Integer.parseInt("10"));  // парсит int из строки
        System.out.println( "x = " + x);
    }
}

Вывод:

Запустите файл numberTest.java с использованием следующей команды:

javac /home/labex/project/numberTest.java
java numberTest

Посмотрите на вывод:

10
x = 2

String

Строки - это объекты, поэтому вы можете спросить: «Какие данные содержатся в объекте String?» и «Какие методы мы можем вызывать для объектов String?» Компонентами объекта String являются символы. Не все символы - это буквы; некоторые - это цифры, другие - специальные символы, а остальные - другие классы символов. Для простоты будем называть их всеми символами. В классе String есть много методов работы со строками, но мы будем использовать только несколько из них. Остальные можно найти в документации на официальном сайте.

Примечание: Класс String неизменяем, поэтому一旦 создан, объект String нельзя изменить. Если необходимо делать много изменений в строках символов, то следует использовать классы StringBuffer и StringBuilder.

Ниже приведен список некоторых общих методов классов String, StringBuffer и StringBuilder:

  • char charAt(int index): Возвращается указанный символ последовательности, которая в настоящее время представлена в виде строки, как показано аргументом index.
  • void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin): Символы копируются из этого буфера строк в целевой массив символов dst.
  • int indexOf(String str): Возвращает индекс первого вхождения указанной подстроки в этой строке.
  • int indexOf(String str, int fromIndex): Возвращает индекс первого вхождения указанной подстроки в этой строке, начиная с указанного индекса.
  • int lastIndexOf(String str): Возвращает индекс правого вхождения указанной подстроки в этой строке.
  • int lastIndexOf(String str, int fromIndex): Возвращает индекс последнего вхождения указанной подстроки в этой строке, сдвигаясь назад, начиная с указанного индекса.
  • int length(): Возвращает длину (количество символов) этого буфера строк.
  • String substring(int start): Возвращает новую строку, которая содержит подпоследовательность символов, которые в настоящее время содержатся в этом StringBuffer. Подстрока начинается с указанного индекса и продолжается до конца StringBuffer.
  • String substring(int start, int end): Возвращает новую String, которая содержит подпоследовательность символов, которые в настоящее время содержатся в этом StringBuffer.

Пример:

Напишите следующий код в файле /home/labex/project/stringTest.java:

public class stringTest
{
    public static void main(String[] args){
        String greeting = "Hello world!";
        String hello = new String("Hello!");
        System.out.println("greeting is: "+ greeting);
        System.out.println("hello is: "+ hello);
        System.out.println("length of greeting: " + greeting.length());
        System.out.println("first char of greeting: " + greeting.charAt(0));
        System.out.println("index of 'e' in hello: "+ hello.indexOf('e'));
        System.out.println("substring of greeting: "+ greeting.substring(6));  //substr: world

    }
}

Вывод:

Запустите файл stringTest.java с использованием следующей команды:

javac /home/labex/project/stringTest.java
java stringTest

Посмотрите на вывод:

greeting is: Hello world!
hello is: Hello!
length of greeting: 12
first char of greeting: H
index of 'e' in hello: 1
substring of greeting: world!

Array

Структура массива используется для хранения коллекции данных, но часто полезнее думать о массиве как о коллекции переменных одного типа. Вместо объявления отдельных переменных, таких как number0, number1,..., number99, вы объявляете одну переменную массива numbers и используете numbers[0], numbers[1],..., numbers[99] для представления отдельных переменных. Первый элемент массива имеет индекс 0.

Ниже приведен список некоторых общих методов, которые имеют массивы:

  • public static int binarySearch(Object[] a, Object key): Ищет заданное значение в указанном массиве с использованием алгоритма бинарного поиска. Массив должен быть отсортирован перед вызовом этого метода. Возвращает индекс искомого ключа, если он содержится в массиве; в противном случае возвращает (–(точка вставки + 1)).
  • public static boolean equals(long[] a, long[] a2): Возвращает true, если два указанных массива long равны друг другу. Два массива считаются равными, если оба массива содержат одинаковое количество элементов и все соответствующие пары элементов в двух массивах равны. Возвращает true, если два массива равны. Этот же метод может быть использован для других примитивных типов данных (byte, short, int и т.д.) также.
  • public static void fill(int[] a, int val): Назначает указанное целочисленное значение каждому элементу указанного массива int. Этот же метод может быть использован для других примитивных типов данных (byte, short и т.д.) также.
  • public static void sort(Object[] a): Сортирует указанный массив объектов в порядке возрастания в соответствии с естественным порядком их элементов. Этот же метод может быть использован для примитивных типов данных (byte, short, int и т.д.) также.

Пример:

Напишите следующий код в файле /home/labex/project/arrayTest.java:

public class arrayTest
{
    public static void main(String[] args){
        // вы можете использовать new для инициализации пустого массива.
        String[] nameArray1 = new String[5];
        // заполните пустые элементы nameArray1 одним и тем же именем "abc"
        java.util.Arrays.fill(nameArray1,"abc");
        // цикл for также можно использовать для итерации по массиву
        for (String name:nameArray1){
            System.out.println(name);
        }
        // вы можете использовать некоторые значения для инициализации массива.
        String[] nameArray2 = {"Candy", "Fancy", "Ann", "Ella", "Bob"};
        // вы можете получить длину массива
        System.out.println("Length of nameArray2: " + nameArray2.length);
        // вы можете получить значение по индексу
        System.out.println("The last item of nameArray2 is " + nameArray2[4]);
        // отсортировать объект массива
        java.util.Arrays.sort(nameArray2);
        System.out.println("Sorted nameArray2 by alphabet:");
        for(String name:nameArray2){
            System.out.println(name);
        }
    }
}

Вывод:

Запустите файл arrayTest.java с использованием следующей команды:

javac /home/labex/project/arrayTest.java
java arrayTest

Посмотрите на вывод:

abc
abc
abc
abc
abc
Length of nameArray2: 5
The last item of nameArray2 is Bob
Sorted nameArray2 by alphabet:
Ann
Bob
Candy
Ella
Fancy

Обзор

Большинство задач заключается в манипуляции данными, такими как числа и строки, поэтому использование встроенных классов Java для выполнения этих задач простым и эффективным. Для более продвинутого использования вы можете прочитать официальную документацию.