2017-02-19 12 views
0

У меня странная проблема. Мне нужно собрать различные System.out.print и создать уникальный возврат String в конце программы.Как я могу удалить System.out.print и получить уникальное возвращение

Как я могу это сделать?

Программа Ниже 'The Цезаря Шифр':

public static String cipher(String input2, Integer number) { 
    String expression = input2; 
    int k = number; 
    int lowerBoundlc = 97; 
    int upperBoundlc = 122; 
    int lowerBounduc = 65; 
    int upperBounduc = 90; 
    for (int i = 0; i < expression.length(); i++) { 
     char c = expression.charAt(i); 
     int j = (int) c; 
     if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) { 
      if (j == 45) { 
       System.out.print(Character.toString((char) j)); 
      } else { 
       int addk = j + k; 
       if (addk > upperBoundlc) { 
        int lowercase = addk % upperBoundlc; 
        int resultlc = lowerBoundlc + lowercase -1; 
        System.out.print(Character.toString((char) resultlc)); 
       } else { 
        System.out.print(Character.toString((char) addk)); 
       } 
      } 

     } else { 
      if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) { 
       int addnewk = j + k; 
       if (addnewk > upperBounduc) { 
        int uppercase = addnewk % upperBounduc; 
        int resultuc = lowerBounduc + uppercase -1; 
        System.out.print(Character.toString((char) resultuc)); 
       } else { 
        System.out.print(Character.toString((char) addnewk)); 
       } 

      } 

     } 

    } 
    return null;  
} 

Спасибо.

+1

Используйте 'StringBuilder' для конкатенации символов. –

+0

@ ElliottFrisch: Благодарю вас за предложение. Я сделал это! – Clash

ответ

0

Вы можете достичь своей цели путем выполнения следующих шагов:
1. Создайте пустой StringBuilder объект в начале шифра метода (этот объект будет содержать последовательность символов, которая формирует окончательный String возвращенной этот способ).
2. Заменить каждую строку кода вида (где х представляет собой переменную int)

System.out.print(Character.toString((char) x)); 

со следующим (где (а) с представляет собой StringBuilder объект, упомянутый в части 1 выше, и (б) это в результате чего линия добавляет char представление х к ы):

s.append((char) x); 

3.После того, как ваша StringBuilder последовательность завершена, получить String представление этой последовательности с помощью следующего метода (где s является StringBuilder объектом в вопросе):

s.toString(); 

Вот модифицированная версия криптографического метода, который использует выше подход:

public static String cipher(String input2, Integer number) { 
     StringBuilder builder = new StringBuilder(input2.length()); 
     int k = number; 
     int lowerBoundlc = 97; 
     int upperBoundlc = 122; 
     int lowerBounduc = 65; 
     int upperBounduc = 90; 
     for (int i = 0; i < input2.length(); i++) { 
      char c = input2.charAt(i); 
      int j = (int) c; 
      if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) { 
       if (j == 45) { 
        builder.append((char) j); 
       } else { 
        int addk = j + k; 
        if (addk > upperBoundlc) { 
         int lowercase = addk % upperBoundlc; 
         int resultlc = lowerBoundlc + lowercase -1; 
         builder.append((char) resultlc); 
        } else { 
         builder.append((char) addk); 
        } 
       } 

      } else { 
       if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) { 
        int addnewk = j + k; 
        if (addnewk > upperBounduc) { 
         int uppercase = addnewk % upperBounduc; 
         int resultuc = lowerBounduc + uppercase -1; 
         builder.append((char) resultuc); 
        } else { 
         builder.append((char) addnewk); 
        } 
       } 
      } 
     } 
     return builder.toString();  
    } 
0

Вместо строгой печати параметра Character.toString ((char) переменной) вы можете присоединить эти строки вместе с помощью + = или, альтернативно, класса StringBuilder.

Примером этого может быть

String s = Character.toString((char) j); 
System.out.print(s); 

String p = Character.toString((char) resultC); 
s += p; 
System.out.print(p); 

После конкатенации всех строк вместе вы могли бы вернуть строку s в самом конце.

0
public static String cipher(String input2, Integer number) { 

    String expression = input2; 
    int k = number; 
    int lowerBoundlc = 97; 
    int upperBoundlc = 122; 
    int lowerBounduc = 65; 
    int upperBounduc = 90; 

    StringBuilder result = new StringBuilder(); 

    for (int i = 0; i < expression.length(); i++) { 
     char c = expression.charAt(i); 
     int j = (int) c; 

     if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) { 
      if (j == 45) { 
       StringBuilder line = new StringBuilder(Character.toString((char) j)); 
       result.append(line); 
      } else { 
       int addk = j + k; 
       if (addk > upperBoundlc) { 
        int lowercase = addk % upperBoundlc; 
        int resultlc = lowerBoundlc + lowercase - 1; 
        StringBuilder appendresultlc = new StringBuilder(Character.toString((char) resultlc)); 
        result.append(appendresultlc); 
       } else { 
        StringBuilder appendaddk = new StringBuilder(Character.toString((char) addk)); 
        result.append(appendaddk); 
       } 
      } 

     } else { 
      if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) { 
       int addnewk = j + k; 
       if (addnewk > upperBounduc) { 
        int uppercase = addnewk % upperBounduc; 
        int resultuc = lowerBounduc + uppercase - 1; 
        StringBuilder appendresultuc = new StringBuilder(Character.toString((char) resultuc)); 
        result.append(appendresultuc); 
       } else { 
        StringBuilder appendaddnewk = new StringBuilder(Character.toString((char) addnewk)); 
        result.append(appendaddnewk); 

       } 

      } 

     } 

    } 
    return result.toString(); 
} 
0

мы можем использовать System.out.println() для печати сообщений в другие источники. Для этого мы должны переназначить стандартный вывод с помощью System.setOut (PrintStream p); метод класса системы

На основании вашей потребности установите System.setOut();

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PrintStream ps = new PrintStream(baos); 

PrintStream old = System.out; 

// use your special stream 
System.setOut(ps); 

// All System.out.Println will goes to special stream 
System.out.println("This will be written to the string!"); 

System.out.flush(); 
System.setOut(old); 

String content = new String(baos.toByteArray(), StandardCharsets.UTF_8); 
System.out.println("Here: " + content); 
0

Для решения этой проблемы существует несколько решений. Но вы можете решить эту проблему с минимальными изменениями в вашем коде с помощью этого решения ...

Прежде всего, вам нужно перенаправить выходной поток по умолчанию, а затем выполнить свою логику, а затем распечатать свой вывод по выходному потоку по умолчанию. Просто обновите ваш основной способ с этим ..

public static void main(String arg[]){ 
    OutputStream os=System.out; 
    //Create piped streams 
    PipedInputStream pis=new PipedInputStream(2000); 
    PipedOutputStream pos=new PipedOutputStream(pis); 
    //Change default output stream 
    System.setOut(pos); 
    //Logic.. 
    cipher("stack",4); 
    //Change default output stream to console 
    System.setOut(os); 
    //Read output from PipedOutput Stream & print on console 
    Scanner sc=new Scanner(System.in); 
    String ct=sc.next(); 
    System.out.print(ct); 
} 

Теперь все, что вы печатаете на стандартный поток вывода в методе шифра не печатается непосредственно на консоли.

Даже вы можете написать вывод своей программы в файл без каких-либо изменений в методе cipher.

0

вы можете просто добавить ответы на строку с помощью конкатенации («+» оператор) & использовать эту строку. вы можете использовать String Builder для повышения производительности.

 Смежные вопросы

  • Нет связанных вопросов^_^