Поиск…


Преобразование других типов данных в String

  • Вы можете получить значение других примитивных типов данных как String, используя метод valueOf класса String.

    Например:

    int i = 42;
    String string = String.valueOf(i);
    //string now equals "42”.
    

    Этот метод также перегружен для других типов данных, таких как float , double , boolean и even Object .

  • Вы также можете получить любой другой объект (любой экземпляр любого класса) в виде строки, вызвав на него .toString . Для этого, чтобы дать полезный вывод, класс должен переопределить toString() . Большинство стандартных классов библиотеки Java, например Date и другие.

    Например:

    Foo foo = new Foo(); //Any class.
    String stringifiedFoo = foo.toString().
    

    Здесь stringifiedFoo содержит представление foo как String.

Вы также можете преобразовать любой тип номера в String с короткими обозначениями, как показано ниже.

int i = 10;
String str = i + "";

Или просто простой способ

String str = 10 + "";

Преобразование в / из байтов

Чтобы закодировать строку в массив байтов, вы можете просто использовать метод String#getBytes() , причем один из стандартных наборов символов доступен в любой среде исполнения Java:

byte[] bytes = "test".getBytes(StandardCharsets.UTF_8);

и для декодирования:

String testString = new String(bytes, StandardCharsets.UTF_8);

вы можете еще больше упростить вызов, используя статический импорт:

import static java.nio.charset.StandardCharsets.UTF_8;
...
byte[] bytes = "test".getBytes(UTF_8);

Для менее распространенных наборов символов вы можете указать набор символов со строкой:

byte[] bytes = "test".getBytes("UTF-8");

и наоборот:

String testString = new String (bytes, "UTF-8");

это означает, однако, что вы должны обрабатывать проверенное UnsupportedCharsetException .


Следующий вызов будет использовать набор символов по умолчанию. Набор символов по умолчанию является специфичным для платформы и обычно отличается между платформами Windows, Mac и Linux.

byte[] bytes = "test".getBytes();

и наоборот:

String testString = new String(bytes);

Обратите внимание, что недопустимые символы и байты могут быть заменены или пропущены этими методами. Для большего контроля - например, для проверки ввода - вам рекомендуется использовать CharsetEncoder и CharsetDecoder .

Кодирование / декодирование Base64

Иногда вы обнаружите необходимость кодирования двоичных данных в виде строки с кодом base64 .

Для этого мы можем использовать класс DatatypeConverter из пакета javax.xml.bind :

import javax.xml.bind.DatatypeConverter;
import java.util.Arrays;

// arbitrary binary data specified as a byte array
byte[] binaryData = "some arbitrary data".getBytes("UTF-8");

// convert the binary data to the base64-encoded string
String encodedData = DatatypeConverter.printBase64Binary(binaryData);
// encodedData is now "c29tZSBhcmJpdHJhcnkgZGF0YQ=="

// convert the base64-encoded string back to a byte array
byte[] decodedData = DatatypeConverter.parseBase64Binary(encodedData);

// assert that the original data and the decoded data are equal
assert Arrays.equals(binaryData, decodedData);

Apache commons-codec

В качестве альтернативы, мы можем использовать Base64 из общедоступного кодека Apache .

import org.apache.commons.codec.binary.Base64;

// your blob of binary as a byte array
byte[] blob = "someBinaryData".getBytes();

// use the Base64 class to encode
String binaryAsAString = Base64.encodeBase64String(blob);

// use the Base64 class to decode
byte[] blob2 = Base64.decodeBase64(binaryAsAString);

// assert that the two blobs are equal
System.out.println("Equal : " + Boolean.toString(Arrays.equals(blob, blob2)));

Если вы проверите эту программу, то увидите, что someBinaryData кодирует c29tZUJpbmFyeURhdGE= , очень c29tZUJpbmFyeURhdGE= объект String -UTF-8 .


Java SE 8

Детали для этого же можно найти на Base64

// encode with padding
String encoded = Base64.getEncoder().encodeToString(someByteArray);

// encode without padding
String encoded = Base64.getEncoder().withoutPadding().encodeToString(someByteArray);

// decode a String
byte [] barr = Base64.getDecoder().decode(encoded); 

Ссылка

Разбор строк на числовое значение

Строка к примитивному числовому типу или числовому типу обертки:

Каждый числовой класс-оболочка предоставляет метод parseXxx который преобразует String в соответствующий примитивный тип. Следующий код преобразует String в int с Integer.parseInt метода Integer.parseInt :

String string = "59";
int primitive = Integer.parseInteger(string);

Чтобы преобразовать в String экземпляр класса числовой оболочки, вы можете либо использовать перегрузку классов- valueOf :

String string = "59";
Integer wrapper = Integer.valueOf(string);

или полагаться на автоматический бокс (Java 5 и более поздние версии):

String string = "59";
Integer wrapper = Integer.parseInteger(string);  // 'int' result is autoboxed

Данная схема работает на byte , short , int , long , float и double и соответствующие классы - оболочек ( Byte , Short , Integer , Long , Float и Double ).

String to Integer с использованием radix:

String integerAsString = "0101"; // binary representation
int parseInt = Integer.parseInt(integerAsString,2);
Integer valueOfInteger = Integer.valueOf(integerAsString,2);
System.out.println(valueOfInteger); // prints 5 
System.out.println(parseInt); // prints 5 

Исключения

Исключенное исключение NumberFormatException будет выведено , если parseXxx(...) метод parseXxx(...) valueOf(String) или parseXxx(...) для строки, которая не является допустимым числовым представлением или представляет значение, выходящее за пределы допустимого диапазона.

Получение `String` из` InputStream`

String может быть прочитана из InputStream с использованием конструктора байтового массива.

import java.io.*;

public String readString(InputStream input) throws IOException {
    byte[] bytes = new byte[50]; // supply the length of the string in bytes here
    input.read(bytes);
    return new String(bytes);
}

Это использует кодировку по умолчанию системы, хотя может быть задана альтернативная кодировка:

return new String(bytes, Charset.forName("UTF-8"));

Преобразование String в другие типы данных.

Вы можете преобразовать числовую строку в различные числовые типы Java следующим образом:

Строка для int:

String number = "12";
int num = Integer.parseInt(number);

Строка для плавания:

String number = "12.0";
float num = Float.parseFloat(number);

Строка в два раза:

String double = "1.47";
double num = Double.parseDouble(double);

Строка: boolean:

String falseString = "False";
boolean falseBool = Boolean.parseBoolean(falseString);   // falseBool = false 
    
String trueString = "True";
boolean trueBool = Boolean.parseBoolean(trueString);     // trueBool = true

Строка длинная:

String number = "47";
long num = Long.parseLong(number);

Строка для BigInteger:

String bigNumber = "21";
BigInteger reallyBig = new BigInteger(bigNumber);

Строка в BigDecimal:

String bigFraction = "17.21455";
BigDecimal reallyBig = new BigDecimal(bigFraction);

Исключения:

Числовые преобразования выше будут NumberFormatException (непроверенное) NumberFormatException если вы попытаетесь проанализировать строку, которая не является соответствующим образом отформатированным номером, или вне диапазона для целевого типа. В разделе « Исключения» обсуждается, как бороться с такими исключениями.

Если вы хотите проверить, что вы можете разбирать строку, вы можете реализовать метод tryParse... следующим образом:

boolean tryParseInt (String value) {  
    try {  
        String somechar = Integer.parseInt(value);
        return true;  
     } catch (NumberFormatException e) { 
        return false;  
     }  
}

Однако вызов этого метода tryParse... непосредственно перед разбором (возможно) является плохим. Было бы лучше просто вызвать метод parse... и обработать исключение.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow