2016-07-26 20 views
0

Ich habe eine String-Array, die beide Kombination von Zeichenfolgen und Ganzzahlen enthält. Ich muss die Zeichenfolgen sortieren und die Ganzzahlen am Ende hinzufügen. Hier ist das Programm, das ich geschrieben habe. Jede Optimierung wäre hilfreich.StringSortingandIntegerAddition ohne regulären Ausdruck

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class SortStringandAddIntegerEx { 
public static void main(String[] args) throws IOException { 
System.out.println("Enter the characters"); 
BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); 
String input = read.readLine(); 
String[] inputArray = { input }; 
List<String> result = new ArrayList<String>(); 
String stringChars = ""; 
String sortedCharacters = ""; 
int sum = 0; 
for (int i = 0; i < inputArray.length; i++) { 
stringChars = stringChars + inputArray[i]; 
} 
for (int j = 0; j < stringChars.length(); j++) { 
if (Character.isDigit(stringChars.charAt(j))) { 
sum = sum + Integer.parseInt(stringChars.valueOf(stringChars.charAt(j))); 

} else { 
sortedCharacters = sortedCharacters + stringChars.charAt(j); 
} 
} 
char[] chars = sortedCharacters.toCharArray(); 
Arrays.sort(chars); 
String sorted = new String(chars); 
result.add(sorted + " " + sum); 
for (int k = 0; k < result.size(); k++) { 
System.out.println("Final output is " + result.get(k)); 
} 
} 
} 

Jede Hilfe würde geschätzt.

Antwort

0

Nach dem Blick auf Ihren Code für eine Weile kann ich wirklich keine Verbesserungen sehen als einfache Syntax, um die Codelänge zu reduzieren, Leistung Sie wirklich haben es abgedeckt, wie ohne eine Regex gibt es wirklich nicht viele andere Möglichkeiten zum Finden von Int in a String anders als jedes Zeichen zu testen und auch die Methode, die Sie verwendet vorausgesetzt, Sie in jeder Zeile 1 zu einem Zeitpunkt passieren hält sich an dieses Leistungsprinzip:

bei Strings 1 zu 256 Zeichen lang, ruft String.charAt (i) gewinnt mit einer durchschnittlichen Verarbeitung von 13,4 Millionen bis 588 Millionen Zeichen pro Sekunde.

Für lange Strings, 512 bis 256K Zeichen Länge, mit Reflection zu Zugriff auf die Backing-Array der String ist am schnellsten. Diese Technik ist fast doppelt so schnell wie String.charAt (i) (178% schneller). Die Durchschnittsgeschwindigkeit über diesen Bereich betrug 1,111 Milliarden Zeichen pro Sekunde.

Die einzigen Vorschläge, die ich habe, sind zur besseren Lesbarkeit:

for (String inputArray1 : inputArray) { 
     stringChars = stringChars + inputArray1; 
    } 

Wahrscheinlich eine wirkliche Hilfe sind nicht da der Code Best Practices zu nutzen scheint. Wie auch immer, viel Glück mit deiner Arbeit!

+0

Schätzen Sie Ihren Vorschlag Ich werde versuchen, wie Sie vorgeschlagen haben. Danke – Pradeep