수색…


다른 데이터 유형을 String으로 변환

  • String 클래스의 valueOf 메서드 중 하나를 사용하여 다른 기본 데이터 형식의 값을 String으로 가져올 수 있습니다.

    예 :

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

    이 메서드는 float , double , booleanObject 와 같은 다른 데이터 유형에도 오버로드됩니다.

  • 또한 .toString 을 호출하여 다른 Object (모든 클래스의 인스턴스)를 String으로 가져올 수 있습니다. 유용한 결과를 얻으려면 클래스가 toString() 재정의해야합니다. 대부분의 표준 Java 라이브러리 클래스는 Date 및 기타와 같은 역할을합니다.

    예 :

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

    여기서 stringifiedFoofoo 의 표현을 String으로 포함합니다.

다음과 같이 짧은 숫자 표기법을 사용하여 모든 숫자 유형을 String으로 변환 할 수도 있습니다.

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

아니면 그냥 간단한 방법입니다

String str = 10 + "";

바이트와의 변환

문자열을 바이트 배열로 인코딩하려면 임의의 Java 런타임에서 사용할 수있는 표준 문자 집합 중 하나와 함께 String#getBytes() 메서드를 사용하면됩니다.

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);

무효 인 캐릭터 나 바이트는,이 메소드로 치환하거나 스킵 할 수 있습니다. 예를 들어 입력의 유효성을 검사하는 것과 같은 더 많은 제어를 위해서는 CharsetEncoderCharsetDecoder 클래스를 사용하는 것이 좋습니다.

Base64 인코딩 / 디코딩

바이너리 데이터를 base64 로 인코딩 된 문자열로 인코딩해야하는 경우가 종종 있습니다.

이를 위해 javax.xml.bind 패키지의 DatatypeConverter 클래스를 사용할 수 있습니다.

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

또는 Apache commons-codec의 Base64 를 사용할 수 있습니다.

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)));

이 프로그램이 실행 중인지 검사하면 c29tZUJpbmFyeURhdGE= 가 매우 관리하기 c29tZUJpbmFyeURhdGE= UTF-8 String 객체 인 c29tZUJpbmFyeURhdGE= 인코딩된다는 것을 someBinaryData 있습니다.


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); 

참고

문자열을 수치로 파싱하기

문자열을 원시 숫자 유형 또는 숫자 래퍼 유형으로 변환합니다.

각 수치 래퍼 클래스는, String 를 대응하는 원시적 형에 변환하는 parseXxx 메소드를 제공합니다. 다음 코드에서는 Integer.parseInt 메서드를 사용하여 Stringint 로 변환합니다.

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

숫자 래퍼 클래스의 인스턴스로 String 로 변환하려면 래퍼 클래스 valueOf 메서드의 오버로드를 사용할 수 있습니다.

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

또는 자동 권투 (자바 5 이상)에 의존 :

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

위의 패턴은 byte , short , int , long , floatdouble 과 해당 래퍼 클래스 ( Byte , Short , Integer , Long , FloatDouble )에서 작동합니다.

기수를 사용하는 String to Integer :

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 

예외

허용되지 않는 숫자 표현이 아니거나 범위를 벗어난 값을 나타내는 valueOf(String) 숫자 valueOf(String) 또는 parseXxx(...) 메서드가 호출되면 검사되지 않은 NumberFormatException 예외가 발생합니다.

`InputStream`에서`String`을 얻습니다.

바이트 배열 생성자를 사용하여 InputStream 에서 String 을 읽을 수 있습니다.

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);
}

대체 charset을 지정할 수는 있지만 시스템 기본 charset을 사용합니다.

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

문자열을 다른 데이터 유형으로 변환.

다음과 같이 숫자 문자열을 다양한 Java 숫자 유형으로 변환 할 수 있습니다.

int에서 String으로 :

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);

부울 값에 문자열 :

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);

String to BigInteger :

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

String to BigDecimal :

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

전환 예외 :

형식 변환이 적절하지 않거나 대상 유형의 범위를 벗어난 문자열을 구문 분석하려고 시도하면 위의 숫자 변환은 모두 (확인되지 ​​않은) 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