ฉันมีสตริง (ซึ่งโดยพื้นฐานแล้วจะเป็นชื่อไฟล์ตามหลักการตั้งชื่อ) abc.def.ghi
ฉันต้องการแยกสตริงย่อยก่อนอันแรก.(เช่นจุด)
ใน java doc api ดูเหมือนว่าฉันจะไม่พบวิธีการใน String ที่ทำเช่นนั้นได้
ฉันพลาดอะไรไปรึเปล่า? ทำอย่างไร?
ฉันมีสตริง (ซึ่งโดยพื้นฐานแล้วจะเป็นชื่อไฟล์ตามหลักการตั้งชื่อ) abc.def.ghi
ฉันต้องการแยกสตริงย่อยก่อนอันแรก.(เช่นจุด)
ใน java doc api ดูเหมือนว่าฉันจะไม่พบวิธีการใน String ที่ทำเช่นนั้นได้
ฉันพลาดอะไรไปรึเปล่า? ทำอย่างไร?
คำตอบ:
ดูและ String.indexOfString.substring
ให้แน่ใจว่าคุณตรวจสอบ indexOf-1
คำตอบที่ยอมรับนั้นถูกต้อง แต่ไม่ได้บอกวิธีใช้ นี่คือวิธีที่คุณใช้ฟังก์ชัน indexOf และสตริงย่อยร่วมกัน
String filename = "abc.def.ghi"; // full file name
int iend = filename.indexOf("."); //this finds the first occurrence of "."
//in string thus giving you the index of where it is in the string
// Now iend can be -1, if lets say the string had no "." at all in it i.e. no "." is found.
//So check and account for it.
String subString;
if (iend != -1)
{
subString= filename.substring(0 , iend); //this will give abc
}
คุณสามารถแยกสตริง ..
public String[] split(String regex)
โปรดสังเกตว่า java.lang.String.split ใช้ค่านิพจน์ทั่วไปของตัวคั่น โดยทั่วไปเป็นเช่นนี้ ...
String filename = "abc.def.ghi"; // full file name
String[] parts = filename.split("\\."); // String array, each element is text between dots
String beforeFirstDot = parts[0]; // Text before the first dot
แน่นอนว่านี่แบ่งออกเป็นหลายบรรทัดเพื่อความมีตาทิพย์ มันสามารถเขียนเป็น
String beforeFirstDot = filename.split("\\.")[0];
หากโครงการของคุณใช้commons-lang อยู่แล้ว StringUtils มีวิธีการที่ดีสำหรับจุดประสงค์นี้:
String filename = "abc.def.ghi";
String start = StringUtils.substringBefore(filename, "."); // returns "abc"
หรือคุณอาจลองทำสิ่งต่างๆเช่น
"abc.def.ghi".substring(0,"abc.def.ghi".indexOf(c)-1);
def.hij.klmอะไร? โค้ดของคุณจะทำงานอย่างไร? (โค้ดของคุณใช้ได้กับตัวอย่างนี้เท่านั้น - คุณอาจเขียนฟังก์ชันที่ส่งคืน"abc"- มันก็ใช้ได้เช่นกัน)
วิธีการใช้ regex
String firstWord = filename.replaceAll("\\..*","")
สิ่งนี้จะแทนที่ทุกอย่างตั้งแต่จุดแรกไปจนถึงจุดสิ้นสุดด้วย "" (กล่าวคือล้างออกทำให้คุณมีสิ่งที่คุณต้องการ)
นี่คือการทดสอบ:
System.out.println("abc.def.hij".replaceAll("\\..*", "");
เอาท์พุต:
abc
ใน java.lang.String คุณจะได้รับวิธีการบางอย่างเช่น indexOf (): ซึ่งจะส่งคืนดัชนีแรกของถ่าน / สตริง และ lstIndexOf: ซึ่งส่งคืนดัชนีสุดท้ายของ String / char
จาก Java Doc:
public int indexOf(int ch)
public int indexOf(String str)
ส่งคืนดัชนีภายในสตริงของการเกิดครั้งแรกของอักขระที่ระบุนี้
นี่คือรหัสที่ส่งคืนสตริงย่อยจาก a Stringจนถึงรายการอักขระใด ๆ ที่กำหนด:
/**
* Return a substring of the given original string until the first appearance
* of any of the given characters.
* <p>
* e.g. Original "ab&cd-ef&gh"
* 1. Separators {'&', '-'}
* Result: "ab"
* 2. Separators {'~', '-'}
* Result: "ab&cd"
* 3. Separators {'~', '='}
* Result: "ab&cd-ef&gh"
*
* @param original the original string
* @param characters the separators until the substring to be considered
* @return the substring or the original string of no separator exists
*/
public static String substringFirstOf(String original, List<Character> characters) {
return characters.stream()
.map(original::indexOf)
.filter(min -> min > 0)
.reduce(Integer::min)
.map(position -> original.substring(0, position))
.orElse(original);
}
สิ่งนี้สามารถช่วยได้:
public static String getCorporateID(String fileName) {
String corporateId = null;
try {
corporateId = fileName.substring(0, fileName.indexOf("_"));
// System.out.println(new Date() + ": " + "Corporate:
// "+corporateId);
return corporateId;
} catch (Exception e) {
corporateId = null;
e.printStackTrace();
}
return corporateId;
}