Wie konvertiere ich CamelCase in menschenlesbare Namen in Java?
Ich würde gerne schreiben, eine Methode, die konvertiert CamelCase in einer für Menschen lesbaren Namen.
Hier ist der test-Fall:
public void testSplitCamelCase() {
assertEquals("lowercase", splitCamelCase("lowercase"));
assertEquals("Class", splitCamelCase("Class"));
assertEquals("My Class", splitCamelCase("MyClass"));
assertEquals("HTML", splitCamelCase("HTML"));
assertEquals("PDF Loader", splitCamelCase("PDFLoader"));
assertEquals("A String", splitCamelCase("AString"));
assertEquals("Simple XML Parser", splitCamelCase("SimpleXMLParser"));
assertEquals("GL 11 Version", splitCamelCase("GL11Version"));
}
Kommentar zu dem Problem - Öffnen
Erste, Sie müssen angeben, dass die Regeln der Konvertierung. Zum Beispiel, wie funktioniert
PDFLoader
werden Sie PDF-Loader
? Hehe 😀 die Frage ist so vage wie bereits von Jörg Schou-Rode
Ich nenne das format "PascalCase". In "camelCase", der erste Buchstabe sollte in Kleinbuchstaben geschrieben sein. Zumindest für die Entwickler, die betroffen sind. msdn.microsoft.com/en-us/library/x2dbyw72(v=vs. 71).aspx
InformationsquelleAutor der Frage Frederik | 2010-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Werke mit Ihrem testcases:
Hier ist ein test-harness:
Es nutzt zero-length-matching mit regex lookbehind und lookforward zu finden, wo Sie Leerzeichen einfügen. Grundsätzlich gibt es 3 Muster, und ich benutze
String.format
setzen Sie Sie zusammen, um Sie lesbarer zu machen.Die drei Muster sind:
UC hinter mir, UC, gefolgt von LC vor mir
UC nicht hinter mir, UC vor mir
Brief hinter mir, nicht-Brief vor mir
Referenzen
Fragen
Unter Verwendung von null-Länge passende lookarounds aufteilen:
InformationsquelleAutor der Antwort polygenelubricants
Kann man es mit
org.apache.commons.lang.StringUtils
InformationsquelleAutor der Antwort Ralph
Wenn Sie nicht wie "kompliziert" regex ist, und überhaupt nicht die Mühe gemacht um Effizienz geht, dann habe ich dieses Beispiel, um den gleichen Effekt erzielen, in drei Stufen.
Geht es alle test-Fälle vor, einschließlich derjenigen, die mit Ziffern.
Wie gesagt, dies ist nicht so gut wie mit dem regulären Ausdruck in einigen anderen Beispielen hier - aber es könnte jemand gut finden es nützlich.
InformationsquelleAutor der Antwort jlb83
Können Sie org.modeshape.common.text.Beugung.
Speziell:
Maven-Artefakt ist: org.modeshape:modeshape-common:2.3.0.Letzte
auf JBoss-repository: https://repository.jboss.org/nexus/content/repositories/releases
Hier ist die JAR-Datei: https://repository.jboss.org/nexus/content/repositories/releases/org/modeshape/modeshape-common/2.3.0.Final/modeshape-common-2.3.0.Final.jar
InformationsquelleAutor der Antwort Hendy Irawan
Die saubere und kürzere Lösung :
InformationsquelleAutor der Antwort Sahil Chhabra
Folgende Regex kann verwendet werden, um zu identifizieren, die Kapitelle im inneren Worte:
Es passt zu jedem Großbuchstaben, dass ist äther nach einer nicht-Großbuchstaben, Ziffern oder gefolgt von einem Kleinbuchstaben und jede Ziffer nach einem Buchstaben.
Wie um ein Leerzeichen einzufügen, bevor Sie geht über meine Java-skills =)
Bearbeitet, gehören die Ziffernschreibweise und die PDF-Loader Fall.
InformationsquelleAutor der Antwort Jens
Ich denke, dass Sie zum Durchlaufen der Schnur und erkennen von änderungen von klein-in Großbuchstaben, Großbuchstaben, Kleinbuchstaben, alphabetisch, numerisch, numerisch, alphabetisch. Bei jeder änderung, die Sie erkennen stecken Sie einen Raum mit einer Ausnahme allerdings: auf einen Wechsel von groß - zu Kleinbuchstaben fügen Sie das Leerzeichen ein Zeichen vor.
InformationsquelleAutor der Antwort Felix
Funktioniert .NET... zu optimieren nach Ihren wünschen. Ich habe Kommentare Hinzugefügt, so dass Sie verstehen, was jedes Stück zu tun. (RegEx sein kann, schwer zu verstehen)
InformationsquelleAutor der Antwort Xinbi
Für das Protokoll, hier ist ein fast (*) kompatibel Scala version:
Einmal kompiliert, kann es verwendet werden, direkt aus Java, wenn der entsprechende scala-library.jar ist in den classpath.
(*) es fällt für die Eingabe
"GL11Version"
für die, die es gibt"G L11 Version"
.InformationsquelleAutor der Antwort gerferra
Nahm ich die Regex aus polygenelubricants und verwandelte Sie in eine extension-Methode auf Objekte:
Diese dreht sich alles in einem lesbaren Satz. Es hat eine ToString-Methode auf das übergebene Objekt. Dann wird die Regex gegeben durch polygenelubricants zu split die Zeichenfolge. Dann ist es ToLowers jedes Wort, außer das erste Wort und alle Akronyme. Dachte, es könnte nützlich sein, für jemanden da draußen.
InformationsquelleAutor der Antwort vbullinger
Ich bin kein regex-ninja, also ich würd Durchlaufen der Schnur, halten die Indizes der aktuellen position geprüft & die Vorherige position. Wenn die aktuelle position ein Buchstabe ist, würde ich ein Leerzeichen einfügen, nachdem die Vorherige position und einer Schrittweite von jedem index.
InformationsquelleAutor der Antwort Joel
RegEx funktionieren sollte, so etwas wie
([A-Z]{1})
. Dies wird erfassen alle Großbuchstaben, danach könnten Sie ersetzen Sie Sie mit\1
oder wie auch immer Sie sich beziehen können, um RegEx-Gruppen in Java.InformationsquelleAutor der Antwort Bobby
http://code.google.com/p/inflection-js/
Könnte man die Kette String.Unterstrich().humanize() Methoden nehmen eine CamelCase-string und konvertieren es in eine lesbare Zeichenfolge.
InformationsquelleAutor der Antwort BeesonBison