2014-10-01 346 views
0

所以我需要弄清楚如何找到在字符串中出現在字母表中的第一個字母。如何查找字符串中的第一個字母(按字母順序)?

到目前爲止,我有這樣的:

import java.util.Scanner; 


public class alphStr { 

public static void main(String[] args) { 
    System.out.println("Please enter a word - "); 
    Scanner in = new Scanner(System.in); 
    String word = in.nextLine(); 
    System.out.println("The word you entered was: " + word); 
} 

} 

我想我可以通過使用「> || <」字符串中比較信,但我不知道該如何去這樣做。任何建議都會很棒!

經過一番閱讀後結束了這個解決方案,感謝大家的幫助。

import java.util.Scanner; 
    import java.util.Arrays; 

    public class alphStr { 

    public static void main(String[] args) { 

    Scanner input = new Scanner (System.in); 
    System.out.print("Enter a word: "); 
    String word = input.next(); 
    char[] chars = word.toCharArray(); 
    Arrays.sort(chars); 
    String sorted = new String(chars); 
    char x = sorted.charAt(0); 
    System.out.println("Alphabetically, the first letter in your word is: " + x); 
} 
} 
+0

字符串的排序內容並獲取第一個字符? – 2014-10-01 17:21:34

+2

閱讀String類javadoc。您將發現允許訪問字符串字符的方法:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html – 2014-10-01 17:21:52

+1

Stack Overflow已經變得糟糕透了,很多脾氣暴躁的人似乎喜歡這樣,但我必須問(在這裏或其他地方?):這顯然是家庭作業。提交者基本上什麼也沒做。我也許可以花5分鐘指向正確的方向,但是真的有什麼意見,很多人只是爲了獲得投票而混合一些代碼?我認爲這不是在幫助任何人,或者它是? – KarlP 2014-10-01 17:41:16

回答

0

就我個人而言,我會使用String類的toCharArray()方法。如

char[] word2 = word.toCharArray()

完成此操作後,請將第一個字母存儲在單獨的字符變量中,並按字典順序將後續每個字母進行比較。通過這種方式,您可以找到字符串中首先出現的字母(儘管您需要做更多的工作才能在大小寫之間進行排序!)

+0

*「按字母順序比較每個後續字母」*我很確定這是他試圖找出的部分 – 2014-10-01 17:28:43

+0

我建議'word.toLowerCase()。toCharArray();' – Floegipoky 2014-10-01 17:29:17

+0

@Floegipoky由於'String'是不可變的,執行'toLowerCase'會創建一個新的String(額外的對象),並且我真的不認爲大小寫是重要的,只要它是絕對字母(大寫或小寫) – 2014-10-01 17:31:53

0

您可以將單詞中的字母轉換爲小寫,然後存儲它們在數組中, 並應用simple sorting algorithmbubble sort的稍微修改版本),通過比較字符串中每個字符的值ASCII來查找第一個字符。

char[] arr = word.toLowerCase().toCharArray(); 

// assume the smallest character is the character at index 0. 
int first = 0; 

// iterate through characters 1..n-1 to and check if any character is 
// smaller than the one we have identified. 
// if smaller, replace `first` with the index of the current character. 
// at the end of the loop, `first` 
//will have the index of the smallest character. 
for(int i = 1; i < arr.length; i++) { 
    if(arr[i] < arr[first]) { 
     first = i; 
    } 
} 
System.out.println(word.charAt(first)); 
+0

這正是我需要的,但我不太明白它是如何工作的。你能解釋一下嗎?如果沒有,我會嘗試再次閱讀字符串類javadoc。 – user3264285 2014-10-01 17:37:22

+0

@ user3264285「char」可以表示爲「int」,反之亦然。例如,'System.out.println((char)74);' – 2014-10-01 17:39:57

+0

@ user3264285檢查我的更新答案。您需要了解,如果兩個字符的ASCII值相等,則兩個字符相等。比較java中的兩個字符,比較它們的ASCII值。 – BatScream 2014-10-01 17:48:41

0

大限的回答會的工作,但我個人會遍歷字母代替,A-Z,並使用String.indexOf(currentCharacter)代替。這樣您就不必存儲或比較任何東西,只需在第一次退出循環時,indexOf就會返回除-1之外的任何值。

+2

這將是一個時間過度的算法使用。每封信都有26種可能性。這意味着,對於2個字母的單詞「zy」,只需要51個循環迭代來檢查這2個字母。設想一個長度爲100個字符的「字符串」 – 2014-10-01 17:43:26

+1

如果您認爲該字符串可能包含任何字符值,而不僅僅是az(除非您準備循環使用2^16個字符值) 。 – 2014-10-01 17:44:40

+0

@VinceEmigh到目前爲止,包括我在內的所有解決方案都是O(n)最差的情況。計算機將非常樂意在100個字符的字符串上運行此操作。 – Floegipoky 2014-10-01 18:00:05

0

首先將字符串轉換爲Case「Lower」或upper並使用toCharArray()並迭代此數組,直到string.length-1並將第一個char索引存儲在temp變量中,並將char與char數組進行比較並如果發現char小於這個臨時索引char,則將該索引存儲在char中。

您可以在這裏檢查程序:Java program to find the first letter alphabetically in String

相關問題