2017-09-27 5 views
0

Ich muss ein Programm erstellen, das zwei Wörter anzeigt, die ein Benutzer eingegeben hat, dann muss ich den ersten und letzten Buchstaben und die Anzahl der Zeichen anzeigen zwei Wörter.Java - ersten Buchstaben des Wortes nehmen und durch den ersten Buchstaben eines anderen Wortes ersetzen

Dieser Teil ist in Ordnung. Aber als nächstes muss ich den ersten Buchstaben des ersten Wortes mit dem ersten Buchstaben des zweiten Wortes wechseln. Und dann der letzte Buchstabe des ersten Wortes mit dem letzten Buchstaben des zweiten Wortes. Und das gleiche mit dem zweiten Wort.

Dann muss ich das gleiche mit dem zweiten Wort tun.

Ich habe den folgenden Code verwendet, aber er ersetzt ALLE Zeichen im ersten Wort (die das gleiche Zeichen haben) mit dem Zeichen aus dem zweiten Wort.

Bitte helfen. Ich habe das seit Stunden versucht !!! Und ich bin sehr neu dazu.

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

    String word_one; 
    String word_two; 
    System.out.print("Enter 2 words on one line separated by at least one space" 
     + " (no white space allowed IN each word): "); 
    word_one = user_input.next(); 
    word_two = user_input.nextLine(); 

    System.out.println("\nFirst word you entered is <" 
     + word_one 
     + "> which is " 
     + word_one.length() 
     + " characters long.\nIt starts with the character '" 
     + word_one.charAt(word_one.length() - word_one.length()) 
     + "' and ends with the character'" 
     + word_one.charAt(word_one.length() - 1) 
     + "'"); 

    System.out.println("\nSecond word you entered is <" 
     + (word_two.replace(" ", "")) 
     + "> which is " 
     + (word_two.replace(" ", "")).length() 
     + " characters long. \nIt starts with the character '" 
     + word_two.charAt(word_two.length() - word_two.length() + 1) 
     + "' and ends with the character'" 
     + word_two.charAt(word_two.length() - 1) + "'"); 

    user_input.close(); 

    System.out.println("\nNew words: " 
     + word_one.replace(
       word_one.charAt(word_one.length() - word_one.length()), 
       word_two.charAt(word_two.length() - word_two.length() + 1)) 
      .replace(
       word_one.charAt(word_one.length() - 1), 
       word_two.charAt(word_two.length() - 1)) 
     + word_two.replace(
       word_two.charAt(word_two.length() - word_two.length() + 1), 
       word_one.charAt(word_one.length() - word_one.length())) 
      .replace(
       word_two.charAt(word_two.length() - 1), 
       word_one.charAt(word_one.length() - 1))); 
} 

Antwort

0

replace(...) ersetzt alle Vorkommen einer gegebenen Teilzeichenkette durch eine andere Teilzeichenkette. Was Sie suchen, ist replaceFirst(...) für den Ersatz des ersten Buchstabens, aber den letzten zu ersetzen wird nicht so einfach sein. In diesem Fall würde ich mit der Verwendung von substring(...) und manuelle Verkettung gehen.

Alternativ können Sie replaceAll(...) verwenden, das mit regular expressions funktioniert und Anfang/Ende der Zeile/Eingabe-Konstrukte (^$\A\Z) verwenden.

+0

'StringBuilder' hat eine' reverse() 'Methode, die sich als nützlich erweisen könnte. – rossum

+0

char [] r = word_one.toCharArray(); Sie können Ihre Zeichenfolge in Character Array konvertieren. Holen Sie sich einfach das erste Zeichen von word_second und fügen Sie es in den Hauptstring ein, damit es Ihnen hilft –

0

Dies ist viel einfacher, wenn Sie mit Char-Arrays und nicht mit Strings arbeiten. Dann können Sie einfach auf die ersten (wordOne [0]) und letzten (wordOne [wordOne.length]) Elemente zeigen.

import java.util.Scanner; 

public class Main { 


    public static void main(String[] args) 

    { 
     final Scanner userInput = new Scanner(System.in); 

     System.out.print("Enter 2 words on one line separated by at least one space (no white space allowed IN" 
       + " each word): "); 

     final char[] wordOne = nextInput(userInput); 
     final char[] wordTwo = nextInput(userInput); 

     System.out.println("\nFirst word you entered is <" + stringOf(wordOne) + "> which is " + wordOne.length 
       + " characters long.\nIt starts with the character '" + wordOne[(wordOne.length - wordOne.length)] + "' " 
       + "and ends with the character'" + wordOne[wordOne.length - 1] + "'"); 

     System.out.println("\nSecond word you entered is <" + stringOf(wordTwo) + "> which is " + wordTwo.length + " characters long. \nIt starts with the character '" + wordTwo[0] + 
       "' and ends with the character'" + wordTwo[wordTwo.length - 1] + "'"); 

     userInput.close(); 

     char[] newWordOne = wordOne.clone(); 
     newWordOne[0] = wordTwo[0]; 
     newWordOne[wordOne.length - 1] = wordTwo[wordTwo.length - 1]; 

     char[] newWordTwo = wordTwo.clone(); 
     newWordTwo[0] = wordOne[0]; 
     newWordTwo[wordTwo.length - 1] = wordOne[wordOne.length - 1]; 

     System.out.println("\nNew words: " + stringOf(newWordOne) + " " + stringOf(newWordTwo)); 
    } 

    private static String stringOf(final char[] word) { 
     return new String(word); 
    } 

    private static char[] nextInput(final Scanner scanner) { 
     return scanner.next().trim().toCharArray(); 
    } 
} 
0

Vielen Dank für den Hinweis! Aber als es sich herausstellte, musste ich nur Teilzeichenfolgen verwenden und sie dann mit den ersten und letzten Buchstaben der Wörter, die ich brauchte, verketten. Außerdem musste ich alle Leerzeichen durch "" ersetzen, da es immer Buchstaben und Leerzeichen ausschaltete und ich wollte nicht, dass es die Leerzeichen zählt.

Hoffe das hilft anderen!

Verwandte Themen