Javaで文字列をintに変換するにはどうすればよいですか?


3026

どのように変換できますか StringintJavaで?

文字列には数値のみが含まれており、それが表す数値を返したいのですが。

たとえば、文字列を指定すると"1234"、結果は数値になり1234ます。


1
ちなみに、文字列がnullの場合、次の呼び出しに注意してください:int i = Integer.parseInt(null); NullPointerExceptionではなく、NumberFormatExceptionをスローします。
Pavel Molchanov

2
仕様の重要な部分が欠けている場合、この質問が非常に高く評価されることに少し驚いています。文字列に数字しか含まれていない場合はどうなりますか?たとえば、回答の多くは「-1」をうまく解析して-1を返しますが、それが受け入れ可能かどうかはわかりません。
マイケル・ケイ

回答:


4086
String myString = "1234";
int foo = Integer.parseInt(myString);

Javaのドキュメントを見ると、「キャッチ」がこの関数がをスローする可能性があることに気付くでしょう。NumberFormatExceptionもちろん、これを処理する必要があります。

int foo;
try {
   foo = Integer.parseInt(myString);
}
catch (NumberFormatException e)
{
   foo = 0;
}

(この処理では、デフォルトで不正な形式の数値がに設定され0ますが、必要に応じて他のことを実行できます。)

または、IntsJava 8と組み合わせてOptional、文字列をintに変換する強力で簡潔な方法となるGuavaライブラリのメソッドを使用することもできます。

import com.google.common.primitives.Ints;

int foo = Optional.ofNullable(myString)
 .map(Ints::tryParse)
 .orElse(0)

23
NumberFormatExceptionをキャッチすることに加えて、ユーザーは渡される文字列の長さに注意する必要があります。整数をオーバーフローさせるのに十分な長さの場合は、代わりにLong :: parseLongの使用を検討する必要があります。
アリソン

6
@Allisonは、特にPostgreSQLでBIGINTフィールドを使用する場合など、たとえば、自動インクリメントされた主キーフィールド。長く使用する方がはるかに安全
Letholdrus

7
:文字列は最初の数である場合は、チェックすることができstackoverflow.com/questions/1102891/...
JPRLCol

このメソッドは、文字列がベース10で解析可能な整数でない場合にも例外をスローします。他のベースで機能するには、オーバーロードされたメソッドを使用します。例:Integer.parseInt( "1001"、8); ベース8。ソース
ロケシュ

2
強力することができたJava 8のオプションとの組み合わせでグアバを使用しながらも、それはおそらくやり過ぎだといない使用など、簡潔としてNumberUtils.toInt(文字列str、int型はdefaultValue)にはApacheからコモンズ・ラングのライブラリー:int foo = NumberUtils.toInt(myString, 0);
クンダ

681

たとえば、次の2つの方法があります。

Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);

これらの方法にはわずかな違いがあります。

  • valueOf の新しいインスタンスまたはキャッシュされたインスタンスを返します java.lang.Integer
  • parseInt プリミティブを返す int

すべての場合に同じです:Short.valueOf/ parseShortLong.valueOf/ parseLongなど


80
2つの方法の違いについては、この質問を
hertzsprung

19
valueOfメソッドはただreturn valueOf(parseInt(string));
Paul Verest 2014年

@PaulVerest取得できません... valueOf再帰的に呼び出しますか?
idclev 463035818

1
@ user463035818 valueOfには、intとStringの2つのオーバーロードがあります。valueOf(String)は、最初にStringを使用してintに解析しparseInt(String)、次にを使用してそのintをIntegerでラップすることによって実装されvalueOf(int)ます。同じ名前であっても、valueOf(String)およびvalueOf(int)は2つの完全に異なる関数であるため、再帰はありません。
PhilipRoman、2018年

244

さて、考慮すべき非常に重要な点は、Javadocで述べられているように、整数パーサーがNumberFormatExceptionをスローすることです。

int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
}

try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
      //No problem this time, but still it is good practice to care about exceptions.
      //Never trust user input :)
      //Do something! Anything to handle the exception.
}

分割された引数から整数値を取得したり、動的に解析したりする場合は、この例外を処理することが重要です。


「26263Hello」はどのように解析できますか?その場合26263を抽出したい
idclev 463035818

1
@ user463035818 -を参照してくださいdocs.oracle.com/javase/8/docs/api/java/util/regex/... -の定期expresssionパターン"([0-9]+)"意志「キャプチャ」9を通じて1以上の数字1の最初のシーケンス。Matcherそのパッケージのクラスを見てください。
マークスチュワート

83

手動で行う:

public static int strToInt( String str ){
    int i = 0;
    int num = 0;
    boolean isNeg = false;

    //Check for negative sign; if it's there, set the isNeg flag
    if (str.charAt(0) == '-') {
        isNeg = true;
        i = 1;
    }

    //Process each character of the string;
    while( i < str.length()) {
        num *= 10;
        num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
    }

    if (isNeg)
        num = -num;
    return num;
}

22
入力が2 ^ 32より大きい場合はどうなりますか?入力に数値以外の文字が含まれている場合はどうなりますか?
yohm 2014年

87
プログラマーが労働力に加わる際に習得しなければならないことの1つは、それがなければ、車輪を再発明することではありません。これは楽しい演習かもしれませんが、商業的な設定でこの種のことを行う場合、コードがコードレビューに合格することを期待しないでください。
Dawood ibnカリーム2016年

43
-1申し訳ありませんが、これはかなり貧弱なアルゴリズムであり、多くの制限、エラー処理、およびいくつかの奇妙な異常があります(たとえば、「」は例外を示し、「-」は0を生成し、「+」は-5を生成します)。なぜ誰かがこれを選ぶのでしょうInteger.parseInt(s)か?-私はこれがインタビューの質問であるという点を理解していますが、a)これはあなたがこの方法で行うことを意味するものではありません(これは質問者が尋ねたものです)、b)とにかくこの回答はかなり悪い例です。
SusanW

1
-1 31進数のベースを解析したい場合はどうなりますか?Integer.parseInt(str、31)は、そのための1つのライナーです。少し面白そうなコメントですが、重要なポイントはその下にあります。他の誰かが既に作業を行っている場合は、ホイールを再発明しないでください
Nathan Adams

1
このコードは、競合するプログラミングコンテストでの高速IOのために、よく知られたライブラリから適応されたように見えます。そのコンテキストでは、入力データが有効であることが保証され、ソリューションは速度で等級付けされます。検証を行わないInteger.parseInt ため、より高速である必要があります。
kaya3

53

代替ソリューションは、Apache Commonsの NumberUtils を使用することです。

int num = NumberUtils.toInt("1234");

文字列が無効な数値形式の場合は常に0が返されるため、Apacheユーティリティは便利です。したがって、try catchブロックを保存します。

Apache NumberUtils APIバージョン3.4


34
無効な数値が解析されるときに0を使用することはめったにありません。
wnoise 2016年

4
オブジェクトのintフィールドが設定されていない場合、ゼロはデフォルトでJavaが使用するものです。その点で、それは理にかなっています。
リボフラビン2016

15
@Ryboflavinいいえ、ありません。それらの1つは明確に定義された言語のセマンティクスであり、もう
エーテルのような

43

現在、私は大学の課題を行っています。上記のような特定の式を使用することはできません。ASCIIテーブルを見ると、なんとかできました。これははるかに複雑なコードですが、私のように制限されている他の人を助けることができます。

最初にすることは、入力(この場合は数字の文字列)を受け取ることです。私はそれを呼びますString number、そしてこの場合、私は数12を使ってそれを例示します、したがってString number = "12";

もう1つの制限は、繰り返しサイクルを使用できないことでした。そのため、forサイクル(完璧だったはずです)も使用できません。これにより少し制限されますが、それが目標です。私は2桁(最後の2桁を取る)しか必要なかったので、簡単にcharAt解決しました。

 // Obtaining the integer values of the char 1 and 2 in ASCII
 int semilastdigitASCII = number.charAt(number.length()-2);
 int lastdigitASCII = number.charAt(number.length()-1);

コードがあれば、テーブルを調べて必要な調整を行うだけです。

 double semilastdigit = semilastdigitASCII - 48;  //A quick look, and -48 is the key
 double lastdigit = lastdigitASCII - 48;

さて、なぜダブル?まあ、本当に「奇妙な」ステップのためです。現在、2つのdouble、1と2がありますが、12に変換する必要があります。実行できる数学演算はありません。

後者(最後の桁2/10 = 0.2)を次のような方法で(したがって、なぜdoubleで)10で除算します。

 lastdigit = lastdigit/10;

これは単に数字で遊んでいるだけです。最後の桁を10進数に変えていました。しかし今、何が起こるかを見てください:

 double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2

数学をあまり理解しなくても、数値の数字の単位を分離するだけです。ご覧のとおり、0〜9のみを考慮しているため、10の倍数で除算することは、それを格納する「ボックス」を作成するようなものです(1年生の先生がユニットと100について説明したときを思い出してください)。そう:

 int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"

そして、あなたは行き​​ます。次の制限を考慮して、数字のストリング(この場合は2桁)をこれらの2桁で構成される整数に変換しました。

  • 繰り返しのないサイクル
  • parseIntなどの「マジック」式はありません

8
整数を解析するためにタイプdoubleを使用することは、パフォーマンスの点で悪い考えではありません。0.2のような値は、浮動小数点表現の周期的な数値であり、正確に表すことができません。System.out.println(0.1 + 0.2)を試して要点を確認してください-結果は0.3ではありません!できる限りライブラリコードを使用することをお勧めします。この場合はInteger.parseInt()です。
ChrisB

10
この答えは誰もがこれまで二、あなたが記述その制限を持っている必要があり、なぜあなたは、単に使用することはできませんとしてASCIIテーブルを見ている理由は、まず、解決しようとすると、問題の種類のものをクリアしていない'0'文字のための代わり48に持っていると決して実際の数値に悩まされる。第3に、double値での回り道全体は、10で除算しているのでまったく意味がありません。後で10を掛けるだけです。その結果、単純さsemilastdigit * 10 + lastdigitとして小数システムを導入した場合、小学校で学んだ...
ホルガー

2
@Holger最初にプログラミングを開始したとき、およびテストで同様のやり取り(ペン/紙)を書かなければならなかったとき、私は個人的にその制限を与えられました。これは一般的ではありませんが、簡単に理解できる方法であり、数マイルで最も効率的ではありませんが、小規模なプロジェクトに十分に機能する方法です。SO.SEは、数人だけでなくすべての人を助けることを目的としています。事前に作成されたJava式を使用するのではなく、疑似アルゴリズムを作成してアルゴリズムに変換する方法を学ぶことから始める人のために、代替方法を提供しました。私は「0」クールであることを忘れなかったが
オーク

2
これは良い答えではありません。問題は、「Javaで文字列をintに変換するにはどうすればよいですか?」ではなく、「この宿題の問題を任意の制限で解決するにはどうすればよいですか?」これはHomeworkOverflowではなくStackOverflowです。
DavidS

1
この新しいアプローチを使用する理由を明確にしたので、それ自体は問題ではありません。ただし、アプローチで「反復サイクルなし」を使用していることを強調しますが、特定の例では、ソリューションを(2桁の数値に対して)ハードコードして、semilastdigitとのみを使用することにより、この問題を完全に回避していますlastdigit。任意の長さの有効な数値文字列(「-2147483648」と「2147483647」の間の任意の値)を提供した場合、「反復サイクル」を回避するためにソリューションをどのようにコーディングしますか
skomisa

38

Integer.decode

も使用できますpublic static Integer decode(String nm) throws NumberFormatException

ベース8と16でも機能します。

// base 10
Integer.parseInt("12");     // 12 - int
Integer.valueOf("12");      // 12 - Integer
Integer.decode("12");       // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8);  // 10 - int
Integer.valueOf("12", 8);   // 10 - Integer
Integer.decode("012");      // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16);  // 18 - int
Integer.valueOf("12",16);   // 18 - Integer
Integer.decode("#12");      // 18 - Integer
Integer.decode("0x12");     // 18 - Integer
Integer.decode("0X12");     // 18 - Integer
// base 2
Integer.parseInt("11",2);   // 3 - int
Integer.valueOf("11",2);    // 3 - Integer

int代わりに取得したい場合はInteger、以下を使用できます。

  1. 開梱:

    int val = Integer.decode("12"); 
  2. intValue()

    Integer.decode("12").intValue();

最終的に!コンバージョンの結果/出力を実際に投稿するのに苦労している人!「-」記号の付いたものも追加できますか?
not2qubit

29

指定された文字列に整数が含まれていない可能性が少しでもある場合は常に、この特殊なケースを処理する必要があります。悲しいことに、標準のJavaメソッドInteger::parseIntInteger::valueOfスローして、NumberFormatExceptionこの特別なケースを通知します。したがって、フロー制御には例外を使用する必要がありますが、これは一般に悪いコーディングスタイルと見なされます。

私の意見では、この特別なケースは、空のを返すことで処理する必要がありますOptional<Integer>。Javaはそのようなメソッドを提供していないため、次のラッパーを使用します。

private Optional<Integer> tryParseInteger(String string) {
    try {
        return Optional.of(Integer.valueOf(string));
    } catch (NumberFormatException e) {
        return Optional.empty();
    }
}

使用例:

// prints "12"
System.out.println(tryParseInteger("12").map(i -> i.toString()).orElse("invalid"));
// prints "-1"
System.out.println(tryParseInteger("-1").map(i -> i.toString()).orElse("invalid"));
// prints "invalid"
System.out.println(tryParseInteger("ab").map(i -> i.toString()).orElse("invalid"));

これは内部でフロー制御の例外を使用していますが、使用法のコードは非常にクリーンになります。また、が-1有効な値として解析された場合と無効な文字列を解析できなかった場合を明確に区別できます。


24

文字列をintに変換することは、単に数値を変換するよりも複雑です。次の問題について考えています。

  • 文字列には0〜9の数字のみが含まれていますか?
  • 何でアップです- / +の前または文字列の後に?それは可能ですか(会計番号を参照)?
  • 何次第です_- / MIN_INFINITY MAX?文字列が99999999999999999999の場合はどうなりますか?マシンはこの文字列をintとして処理できますか?

1
はい、そして-2 ^ 31あたりに厄介なエッジケースがあります。2 ^ 31を無効にしようとすると、問題が発生する可能性があります......
SusanW

24

それを行う方法:

 1. Integer.parseInt(s)
 2. Integer.parseInt(s, radix)
 3. Integer.parseInt(s, beginIndex, endIndex, radix)
 4. Integer.parseUnsignedInt(s)
 5. Integer.parseUnsignedInt(s, radix)
 6. Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
 7. Integer.valueOf(s)
 8. Integer.valueOf(s, radix)
 9. Integer.decode(s)
 10. NumberUtils.toInt(s)
 11. NumberUtils.toInt(s, defaultValue)

Integer.valueOfは、Integerオブジェクト、その他すべてのメソッド-プリミティブintを生成します。

commons-lang3の最後の2つのメソッドと、ここでの変換に関する大きな記事。


22

parseInt(String str)方法を使用できますIntegerラッパークラスの、文字列値を整数値に変換ます。

例えば:

String strValue = "12345";
Integer intValue = Integer.parseInt(strVal);

Integerクラスも提供valueOf(String str)する方法を:

String strValue = "12345";
Integer intValue = Integer.valueOf(strValue);

また、使用することができるtoInt(String strValue)NumberUtilsユーティリティクラスの変換のために:

String strValue = "12345";
Integer intValue = NumberUtils.toInt(strValue);

22

を使用しInteger.parseInt(yourString)ます。

次の点に注意してください。

Integer.parseInt("1"); // OK

Integer.parseInt("-1"); // OK

Integer.parseInt("+1"); // OK

Integer.parseInt(" 1"); //例外(空白)

Integer.parseInt("2147483648");//例外(整数は最大値 2,147,483,647に制限されます

Integer.parseInt("1.1");//例外(またはまたは許可されていないもの)

Integer.parseInt(""); //例外(0などではない)

例外は1種類のみです。 NumberFormatException


ここでのintの最大値もNumberFormatExceptionを発生させますか?
コーディングウォンバット2018年

いいえ、最大値は大丈夫です
Lukas Bauer

19

私には解決策がありますが、それがどれほど効果的かわかりません。しかし、それはうまく機能し、あなたはそれを改善できると思います。一方、私はJUnitを使用していくつかのテストを行いました。私は関数とテストを添付しました:

static public Integer str2Int(String str) {
    Integer result = null;
    if (null == str || 0 == str.length()) {
        return null;
    }
    try {
        result = Integer.parseInt(str);
    } 
    catch (NumberFormatException e) {
        String negativeMode = "";
        if(str.indexOf('-') != -1)
            negativeMode = "-";
        str = str.replaceAll("-", "" );
        if (str.indexOf('.') != -1) {
            str = str.substring(0, str.indexOf('.'));
            if (str.length() == 0) {
                return (Integer)0;
            }
        }
        String strNum = str.replaceAll("[^\\d]", "" );
        if (0 == strNum.length()) {
            return null;
        }
        result = Integer.parseInt(negativeMode + strNum);
    }
    return result;
}

JUnitを使用したテスト:

@Test
public void testStr2Int() {
    assertEquals("is numeric", (Integer)(-5), Helper.str2Int("-5"));
    assertEquals("is numeric", (Integer)50, Helper.str2Int("50.00"));
    assertEquals("is numeric", (Integer)20, Helper.str2Int("$ 20.90"));
    assertEquals("is numeric", (Integer)5, Helper.str2Int(" 5.321"));
    assertEquals("is numeric", (Integer)1000, Helper.str2Int("1,000.50"));
    assertEquals("is numeric", (Integer)0, Helper.str2Int("0.50"));
    assertEquals("is numeric", (Integer)0, Helper.str2Int(".50"));
    assertEquals("is numeric", (Integer)0, Helper.str2Int("-.10"));
    assertEquals("is numeric", (Integer)Integer.MAX_VALUE, Helper.str2Int(""+Integer.MAX_VALUE));
    assertEquals("is numeric", (Integer)Integer.MIN_VALUE, Helper.str2Int(""+Integer.MIN_VALUE));
    assertEquals("Not
     is numeric", null, Helper.str2Int("czv.,xcvsa"));
    /**
     * Dynamic test
     */
    for(Integer num = 0; num < 1000; num++) {
        for(int spaces = 1; spaces < 6; spaces++) {
            String numStr = String.format("%0"+spaces+"d", num);
            Integer numNeg = num * -1;
            assertEquals(numStr + ": is numeric", num, Helper.str2Int(numStr));
            assertEquals(numNeg + ": is numeric", numNeg, Helper.str2Int("- " + numStr));
        }
    }
}

より簡単に実行できます。(int) Double.parseDouble(input.replaceAll("[^0-9\\.\\-]", ""));
DávidHorváth2018年


17

数値以外の文字をすべて削除してから、整数を解析することから始めることもできます。

String mystr = mystr.replaceAll("[^\\d]", "");
int number = Integer.parseInt(mystr);

ただし、これは負でない数に対してのみ機能することに注意してください。


18
これにより-42、として解析され42ます。

10
ええ、これは元々正しい負でない数値に対してのみ機能するため、この置換手順は必要ありません。他のすべてのケースでは、これを自動的に修正しようとすると、状況が悪化します(ほとんどすべての試みが何かを自動的に修正しようとするため)。を渡すと"4+2"、私が42やろうとしたことは間違っていたということについて何のヒントもなく結果として得られます。ユーザーはのような基本的な式を4+2入力することは有効な入力であるかのように見えますが、アプリケーションは間違った値で続行します。それ以外は、タイプは… Stringではなく、string
Holger

または、最初の行を-> string mystr = mystr.replaceAll( "[^ \\ d \\-]"、 "");に変更します。
apm

13

以前の回答とは別に、いくつかの機能を追加したいと思います。これらは、使用中の結果です。

public static void main(String[] args) {
  System.out.println(parseIntOrDefault("123", 0)); // 123
  System.out.println(parseIntOrDefault("aaa", 0)); // 0
  System.out.println(parseIntOrDefault("aaa456", 3, 0)); // 456
  System.out.println(parseIntOrDefault("aaa789bbb", 3, 6, 0)); // 789
}

実装:

public static int parseIntOrDefault(String value, int defaultValue) {
  int result = defaultValue;
  try {
    result = Integer.parseInt(value);
  }
  catch (Exception e) {
  }
  return result;
}

public static int parseIntOrDefault(String value, int beginIndex, int defaultValue) {
  int result = defaultValue;
  try {
    String stringValue = value.substring(beginIndex);
    result = Integer.parseInt(stringValue);
  }
  catch (Exception e) {
  }
  return result;
}

public static int parseIntOrDefault(String value, int beginIndex, int endIndex, int defaultValue) {
  int result = defaultValue;
  try {
    String stringValue = value.substring(beginIndex, endIndex);
    result = Integer.parseInt(stringValue);
  }
  catch (Exception e) {
  }
  return result;
}

10

述べたように、Apache Commons NumberUtilsはそれを行うことができます。戻る0文字列をintに変換できない場合。

独自のデフォルト値を定義することもできます。

NumberUtils.toInt(String str, int defaultValue)

例:

NumberUtils.toInt("3244", 1) = 3244
NumberUtils.toInt("", 1)     = 1
NumberUtils.toInt(null, 5)   = 5
NumberUtils.toInt("Hi", 6)   = 6
NumberUtils.toInt(" 32 ", 1) = 1 // Space in numbers are not allowed
NumberUtils.toInt(StringUtils.trimToEmpty("  32 ", 1)) = 32;

9

このコードは、いくつかの注意事項とともに使用することもできます。

  • オプション#1:メッセージダイアログを表示するなど、例外を明示的に処理してから、現在のワークフローの実行を停止します。例えば:

    try
        {
            String stringValue = "1234";
    
            // From String to Integer
            int integerValue = Integer.valueOf(stringValue);
    
            // Or
            int integerValue = Integer.ParseInt(stringValue);
    
            // Now from integer to back into string
            stringValue = String.valueOf(integerValue);
        }
    catch (NumberFormatException ex) {
        //JOptionPane.showMessageDialog(frame, "Invalid input string!");
        System.out.println("Invalid input string!");
        return;
    }
  • オプション#2:例外の発生時に実行フローを続行できる場合は、影響を受ける変数をリセットします。たとえば、catchブロックにいくつかの変更を加えた

    catch (NumberFormatException ex) {
        integerValue = 0;
    }

定数は決してnull値を返さないため、比較やその他の計算に文字列定数を使用することは常に良い考えです。


4
JOptionPane.showMessageDialog()バニラJavaの質問に対する答えを入れても意味がありません。
John Hascall 2016年

2
Integer.valueOf(String);タイプを返しませんint
php_coder_3809625


9

数値が常に有効な整数であることが保証されているプログラミング競技では、入力を解析する独自のメソッドを作成できます。これは、検証に関連するすべてのコードをスキップし(そのいずれも必要ないため)、もう少し効率的になります。

  1. 有効な正の整数の場合:

    private static int parseInt(String str) {
        int i, n = 0;
    
        for (i = 0; i < str.length(); i++) {
            n *= 10;
            n += str.charAt(i) - 48;
        }
        return n;
    }
  2. 正と負の両方の整数の場合:

    private static int parseInt(String str) {
        int i=0, n=0, sign=1;
        if (str.charAt(0) == '-') {
            i = 1;
            sign = -1;
        }
        for(; i<str.length(); i++) {
            n* = 10;
            n += str.charAt(i) - 48;
        }
        return sign*n;
    }
  3. これらの数値の前後に空白があると予想される場合は、str = str.trim()さらに処理する前に必ずaを実行してください。


7

単にあなたはこれを試すことができます:

  • Integer.parseInt(your_string);に変換するStringために使用しますint
  • Double.parseDouble(your_string);に変換するStringために使用しますdouble

String str = "8955";
int q = Integer.parseInt(str);
System.out.println("Output>>> " + q); // Output: 8955

String str = "89.55";
double q = Double.parseDouble(str);
System.out.println("Output>>> " + q); // Output: 89.55

この回答は、数年前に投稿されたInteger.parseIntを推奨する回答以外に何も追加していないようです(Stringをdoubleに変換することは別の質問になります)。
Bernhard Barker

7

通常の文字列の場合は、次を使用できます。

int number = Integer.parseInt("1234");

文字列ビルダーと文字列バッファの場合、次を使用できます。

Integer.parseInt(myBuilderOrBuffer.toString());

6
int foo=Integer.parseInt("1234");

文字列に数値以外のデータがないことを確認してください。


5
これは、選択した回答とまったく同じです。
スティーブ・スミス

5
他の誰かがあなたの前に5年を投稿した答えを繰り返すことで、サイトに価値はありません。
Dawood ibnカリーム2017年

これは既に承認済みの回答でカバーされています(約5年前に投稿されました)。
Peter Mortensen

6

Stringをパラメーターとして取るIntegerコンストラクターについて誰も言及しなかったことに少し驚いています。

だから、ここにあります:

String myString = "1234";
int i1 = new Integer(myString);

Java 8-Integer(String)

もちろん、コンストラクタはtypeを返しInteger、ボックス化解除操作は値をに変換しますint


言及することが重要です:このコンストラクタはparseIntメソッドを呼び出します。

public Integer(String var1) throws NumberFormatException {
    this.value = parseInt(var1, 10);
}

5

Integer.parseInt()を使用してtry...catchブロック内に配置し、数値以外の文字が入力された場合に備えてエラーを処理します。次に例を示します。

private void ConvertToInt(){
    String string = txtString.getText();
    try{
        int integerValue=Integer.parseInt(string);
        System.out.println(integerValue);
    }
    catch(Exception e){
       JOptionPane.showMessageDialog(
         "Error converting string to integer\n" + e.toString,
         "Error",
         JOptionPane.ERROR_MESSAGE);
    }
 }


5

次の7つの方法で実行できます。

import com.google.common.primitives.Ints;
import org.apache.commons.lang.math.NumberUtils;

String number = "999";

1)使用Ints.tryParse

int result = Ints.tryParse(number);

2)使用NumberUtils.createInteger

Integer result = NumberUtils.createInteger(number);

3)使用NumberUtils.toInt

int result = NumberUtils.toInt(number);

4)使用Integer.valueOf

Integer result = Integer.valueOf(number);

5)使用Integer.parseInt

int result = Integer.parseInt(number);

6)使用Integer.decode

int result = Integer.decode(number);

7)使用Integer.parseUnsignedInt

int result = Integer.parseUnsignedInt(number);

NumberUtilsはnullおよび空のシナリオも処理します。
Sundararaj Govindasamy

5

1つのメソッドはparseInt(String)です。プリミティブintを返します。

String number = "10";
int result = Integer.parseInt(number);
System.out.println(result);

2番目のメソッドはvalueOf(String)で、新しいInteger()オブジェクトを返します。

String number = "10";
Integer result = Integer.valueOf(number);
System.out.println(result);

これは以前の回答でカバーされていませんか?
Peter Mortensen

4

次のいずれかを使用できます。

  1. Integer.parseInt(s)
  2. Integer.parseInt(s, radix)
  3. Integer.parseInt(s, beginIndex, endIndex, radix)
  4. Integer.parseUnsignedInt(s)
  5. Integer.parseUnsignedInt(s, radix)
  6. Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
  7. Integer.valueOf(s)
  8. Integer.valueOf(s, radix)
  9. Integer.decode(s)
  10. NumberUtils.toInt(s)
  11. NumberUtils.toInt(s, defaultValue)

4

これは、ライブラリを使用せずにすべての条件が正と負の完全なプログラムです

import java.util.Scanner;


public class StringToInt {

    public static void main(String args[]) {
        String inputString;
        Scanner s = new Scanner(System.in);
        inputString = s.nextLine();

        if (!inputString.matches("([+-]?([0-9]*[.])?[0-9]+)")) {
            System.out.println("Not a Number");
        }
        else {
            Double result2 = getNumber(inputString);
            System.out.println("result = " + result2);
        }
    }


    public static Double getNumber(String number) {
        Double result = 0.0;
        Double beforeDecimal = 0.0;
        Double afterDecimal = 0.0;
        Double afterDecimalCount = 0.0;
        int signBit = 1;
        boolean flag = false;

        int count = number.length();
        if (number.charAt(0) == '-') {
            signBit = -1;
            flag = true;
        }
        else if (number.charAt(0) == '+') {
            flag = true;
        }
        for (int i = 0; i < count; i++) {
            if (flag && i == 0) {
                continue;
            }
            if (afterDecimalCount == 0.0) {
                if (number.charAt(i) - '.' == 0) {
                    afterDecimalCount++;
                }
                else {
                    beforeDecimal = beforeDecimal * 10 + (number.charAt(i) - '0');
                }
            }
            else {
                afterDecimal = afterDecimal * 10 + number.charAt(i) - ('0');
                afterDecimalCount = afterDecimalCount * 10;
            }
        }
        if (afterDecimalCount != 0.0) {
            afterDecimal = afterDecimal / afterDecimalCount;
            result = beforeDecimal + afterDecimal;
        }
        else {
            result = beforeDecimal;
        }
        return result * signBit;
    }
}

2
ホイールを再発明する必要はありませんInteger.parseInt。使用するだけです。
ドリアン・グレイ、

@TobiasWeimerはい、できますが、これはライブラリを使用せずに行われます
Anup Gupta

@TobiasWeimer、一部の人々は、ライブラリを使用せずにこれを行う方法を必要としています。
Anup Gupta

5
いいえ、JDK内の関数であり、サードパーティのプラグインではないため、誰もそれを必要としません。
ドリアン・グレイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.