2010-04-20 15 views
27

tôi có các giá trị sau:Làm thế nào để nối các giá trị int trong java?

int a=1; 
int b=0; 
int c=2; 
int d=2; 
int e=1; 

Làm thế nào để tôi nối những giá trị này để tôi kết thúc với một String đó là 10221; xin lưu ý rằng nhân a bởi 10000, b trước 1000 ..... và e bởi 1 sẽ không hoạt động kể từ b=0 và do đó tôi sẽ mất khi tôi thêm giá trị lên.

+1

Sử dụng Horner-Scheme: (((((* 10 + b) * 10 + c) * 10 + d) * 10 + e. Tại sao bạn mất b, khi bạn thêm chúng? – Searles

+0

Thông tin thêm về Horner-Scheme: http://stackoverflow.com/questions/1991380/what-does-the-operator-do-in-java/ – polygenelubricants

Trả lời

11

Trên thực tế,

int result = a * 10000 + b * 1000 + c * 100 + d * 10 + e; 
String s = Integer.toString(result); 

sẽ làm việc.

Lưu ý: điều này sẽ chỉ làm việc khi a là lớn hơn 0 và tất cả các b, c, de là trong [0, 9]. Ví dụ, nếu b là 15, phương pháp của Michael sẽ cho bạn kết quả mà bạn có thể muốn.

+2

Hãy xem xét trường hợp khi a là 0 ... –

+0

cảm ơn, nhưng nếu a = 0? Sau đó, tôi sẽ mất một tôi sẽ không? – Shamli

+0

Hãy xem xét xem xét, thêm nó vào ghi chú. –

4

Nếu bạn nhân b trước 1000, bạn sẽ không mất bất kỳ giá trị nào. Xem dưới đây cho toán học.

10000 
    0 
    200 
    20 
    1 
===== 
10221 
+0

nếu giá trị đầu tiên bằng 0 thì sao? – Shamli

+1

Nó vẫn hoạt động. Nó sẽ cho bạn giá trị thích hợp. Bạn có cần nó chính xác 5 ký tự không? –

4
StringBuffer sb = new StringBuffer(); 
sb.append(a).append(b).append(c)... 

Giữ các giá trị như một int được ưa thích ngươi, như là câu trả lời khác cho bạn.

+4

'StringBuilder' trong trường hợp này là quá mức cần thiết; đồng bằng cũ '+' là tốt và dễ đọc hơn nhiều. – polygenelubricants

+1

Có thể đọc được cho ai? Tôi thích StringBuffer/StringBuilder trong trường hợp này, và đồng ý với Jon Skeets nhận xét về câu trả lời của Michaels. –

1

Tôi khuyên bạn nên chuyển đổi chúng thành Chuỗi.

StringBuilder concatenated = new StringBuilder(); 
concatenated.append(a); 
concatenated.append(b); 
/// etc... 
concatenated.append(e); 

Sau đó chuyển đổi trở lại một Integer:

Integer.valueOf(concatenated.toString()); 
+0

Có vẻ như anh ta muốn một String là kết quả cuối cùng, vì vậy việc phân tích cú pháp là không cần thiết (và nếu nó thực sự muốn, giải pháp chính xác sẽ là chỉ thêm các số không có bất kỳ String tomfoolery nào) –

+0

nhưng nếu các con số vừa được thêm vào, kết quả sẽ là 6, không phải là 10221 ... – Grundlefleck

+0

@polygenelubricants: Hoàn toàn đồng ý với bạn - hãy quên câu trả lời này, câu trả lời của Michael hoặc Jon là những giải pháp tốt nhất cho thông tin được cung cấp :) – Grundlefleck

1

Sử dụng StringBuilder

StringBuilder sb = new StringBuilder(String.valueOf(a)); 
sb.append(String.valueOf(b)); 
sb.append(String.valueOf(c)); 
sb.append(String.valueOf(d)); 
sb.append(String.valueOf(e)); 
System.out.print(sb.toString()); 
4

Những người khác đã chỉ ra rằng nhân b 1000 không nên gây ra một vấn đề - nhưng nếu một là số không, bạn sẽ mất nó. (Bạn sẽ nhận được một chuỗi gồm 4 chữ số thay vì 5.)

Đây là phương pháp thay thế (mục đích chung) - giả định rằng tất cả các giá trị nằm trong khoảng 0-9. (Bạn hoàn toàn có thể đưa vào một số mã để ném một ngoại lệ nếu điều đó hóa ra là không đúng, nhưng tôi đã bỏ nó ra khỏi đây để đơn giản.)

public static String concatenateDigits(int... digits) 
{ 
    char[] chars = new char[digits.length]; 
    for (int i = 0; i < digits.length; i++) 
    { 
     chars[i] = (char)(digits[i] + '0'); 
    } 
    return new String(chars); 
} 

Trong trường hợp này bạn sẽ gọi nó bằng :

String result = concatenateDigits(a, b, c, d, e); 
35

cách đơn giản nhất (nhưng hơi bẩn):

String result = "" + a + b + c + d + e 

Edit: tôi không khuyên này và đồng ý với bình luận của Jon. Việc thêm những chuỗi trống thừa đó có lẽ là sự thỏa hiệp tốt nhất giữa sự ngắn gọn và rõ ràng.giải pháp

+1

Bẩn? Gì? http://stackoverflow.com/questions/2506474/is-concatenating-with-an-empty-string-to-do-a-string-conversion-really-that-bad – polygenelubricants

+0

@polygenelubricants: vâng, tôi tình cờ không đồng ý với đa số ý kiến ​​về điểm đó. –

+12

Tôi không phải là một fan hâm mộ của điều này - Tôi nghĩ rằng "a +" "+ b +" "+ c +" "+ d +" "+ e' sẽ rõ ràng hơn, bản thân mình - mặc dù nhiều hơn nữa, một thời gian dài. Nó chỉ là quá dễ dàng để nhìn vào "a + b" và nghĩ rằng sẽ được thêm các số nguyên với nhau, IMO. –

29

Michael Borgwardt là tốt nhất cho 5 chữ số, nhưng nếu bạn có số biến của các chữ số, bạn có thể sử dụng một cái gì đó như thế này:

public static String concatenateDigits(int... digits) { 
    StringBuilder sb = new StringBuilder(digits.length); 
    for (int digit : digits) { 
    sb.append(digit); 
    } 
    return sb.toString(); 
} 
+0

Cảm ơn tất cả mọi người cho câu trả lời của bạn, tôi luôn luôn làm việc với 5 chữ số, nhưng trong nhiều trường hợp họ bắt đầu với 0, vì vậy cách của Michael là cách wat ;-) – Shamli

+0

Điều này cũng làm việc với 0s. Đối với 5 chữ số, nó luôn cho kết quả tương tự như của Michael; lợi thế duy nhất của nó (mà bạn không cần) là nó hoạt động với số lượng chữ số thay đổi. – polygenelubricants

+1

+1 Để chỉ sử dụng Danh sách đối số độ dài biến. –

1

Mọi người băn khoăn về những gì xảy ra khi một == 0. Dễ dàng sửa chữa cho điều đó ... có một chữ số trước nó. :)

int sum = 100000 + a*10000 + b*1000 + c*100 + d*10 + e; 
System.out.println(String.valueOf(sum).substring(1)); 

Hạn chế lớn nhất: tạo hai chuỗi. Nếu đó là một vấn đề lớn, String.format có thể giúp bạn.

int sum = a*10000 + b*1000 + c*100 + d*10 + e; 
System.out.println(String.format("%05d", sum)); 
1

Bạn có thể sử dụng

String x = a+"" +b +""+ c+""+d+""+ e; 
int result = Integer.parseInt(x); 
+3

Mục đích là để đi * từ * số nguyên * thành * một chuỗi ... –

+1

Đây chính là điều tôi muốn ... cảm ơn! – wael34218

3

Đối với niềm vui ... làm thế nào KHÔNG để làm điều đó ;-)

String s = Arrays.asList(a,b,c,d,e).toString().replaceAll("[\\[\\], ]", ""); 

Không phải là ai sẽ thực sự nghĩ về làm theo cách này trong trường hợp này - nhưng điều này minh họa tại sao điều quan trọng là phải cấp quyền truy cập cho c các thành viên đối tượng ertain, nếu không thì người dùng API sẽ phân tích cú pháp biểu diễn chuỗi của đối tượng của bạn, và sau đó bạn bị kẹt không thể sửa đổi hoặc phá vỡ mã của họ nếu bạn làm như vậy.

8

chỉ để không quên format phương pháp

String s = String.format("%s%s%s%s%s", a, b, c, d, e); 

(%1.1s%1.1s%1.1s%1.1s%1.1s nếu bạn chỉ muốn chữ số đầu tiên của mỗi số ...)

+0

đây là giải pháp tốt nhất cho đến nay –

0

giải pháp tốt nhất đã được thảo luận. Đối với các heck của nó, bạn có thể làm được điều này cũng như: Cho rằng bạn luôn luôn đối phó với 5 chữ số,

(new java.util.Formatter().format("%d%d%d%d%d", a,b,c,d,e)).toString() 

Tôi không khẳng định đây là cách tốt nhất; chỉ cần thêm một cách thay thế để xem xét các tình huống tương tự. :)

0

Làm thế nào về việc không sử dụng dây ở tất cả ...

này nên làm việc cho bất kỳ số lượng chữ số ...

int[] nums = {1, 0, 2, 2, 1}; 

int retval = 0; 

for (int digit : nums) 
{ 
    retval *= 10; 
    retval += digit; 
} 

System.out.println("Return value is: " + retval); 
+1

câu hỏi là: "Làm thế nào để tôi nối các giá trị này để tôi kết thúc bằng một ** Chuỗi ** ..."! –

19

này đã làm việc cho tôi.

int i = 14; 
int j = 26; 
int k = Integer.valueOf(String.valueOf(i) + String.valueOf(j)); 
System.out.println(k); 

Hóa ra như 1426

+0

logic tốt cho điều đó. –

+0

nhờ công việc của mình cho tôi –

0

Ghi nhận các cuộc thảo luận here và sau cùng là giải pháp chung trong currently most widely accepted answer tôi có lẽ sẽ đề nghị phương án sau:

public static String concatenateDigits(int... digits) { 
    String result = ""; 
    for (int digit : digits) { 
    result += digit; 
    } 
    return result; 
} 

tôi sẽ hoãn đến đầu tiên của tôi liên kết để thảo luận về việc liệu điều này có thực sự được biên dịch sang cùng một mã byte như giải pháp gốc hay không, nhưng tôi thấy nó trực quan hơn một chút, nhanh hơn để đọc và ít cồng kềnh hơn để gắn với ngôn ngữ fe atures thay vì các cuộc gọi API. Nhưng đó là vấn đề rõ ràng.

2

Giả sử bạn bắt đầu với các biến:

int i=12; 
int j=12; 

này sẽ cung cấp sản lượng 1212:

System.out.print(i+""+j); 

Và điều này sẽ cho sản lượng 24:

System.out.print(i+j); 
-1
public class joining { 

    public static void main(String[] args) { 
     int a=1; 
     int b=0; 
     int c=2; 
     int d=2; 
     int e=1; 

     String j = Long.toString(a); 
     String k = Long.toString(b); 
     String l = Long.toString(c); 
     String m = Long.toString(d); 
     String n = Long.toString(e); 

     /* String s1=Long.toString(a); // converting long to String 
     String s2=Long.toString(b); 
     String s3=s2+s1; 
     long c=Long.valueOf(s3).longValue(); // converting String to long 
     */ 

     System.out.println(j+k+l+m+n); 
    } 
} 
0

couldn Bạn chỉ cần làm cho các chuỗi số, nối chúng, và chuyển đổi các chuỗi thành một giá trị số nguyên?

1

Sau Java 8 bạn có thể sử dụng StringJoiner, một cách rất sạch sẽ và linh hoạt hơn (đặc biệt là nếu bạn có một danh sách như là đầu vào thay vì thiết lập được biết đến của các biến ae):

int a = 1; 
int b = 0; 
int c = 2; 
int d = 2; 
int e = 1; 
List<Integer> values = Arrays.asList(a, b, c, d, e); 
String result = values.stream().map(i -> i.toString()).collect(Collectors.joining()); 
System.out.println(result); 

Nếu bạn cần một tách sử dụng:

String result = values.stream().map(i -> i.toString()).collect(Collectors.joining(",")); 

Để có được kết quả sau:

1,0,2,2,1

Các vấn đề liên quan