【发布时间】:2011-10-07 05:41:46
【问题描述】:
我有一个字符串(基本上是遵循命名约定的文件名)abc.def.ghi
我想提取第一个.之前的子字符串(即一个点)
在 java doc api 中,我似乎无法在 String 中找到执行此操作的方法。
我错过了什么吗?怎么做?
【问题讨论】:
标签: java
我有一个字符串(基本上是遵循命名约定的文件名)abc.def.ghi
我想提取第一个.之前的子字符串(即一个点)
在 java doc api 中,我似乎无法在 String 中找到执行此操作的方法。
我错过了什么吗?怎么做?
【问题讨论】:
标签: java
接受的答案是正确的,但它没有告诉您如何使用它。这就是你如何一起使用 indexOf 和 substring 函数。
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
}
【讨论】:
你可以split字符串..
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];
【讨论】:
查看String.indexOf 和String.substring。
确保为 indexOf 检查 -1。
【讨论】:
如果你的项目已经使用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" 的函数 - 它也同样适用)
使用正则表达式怎么样?
String firstWord = filename.replaceAll("\\..*","")
这会用“”替换从第一个点到结尾的所有内容(即清除它,留下你想要的)
这是一个测试:
System.out.println("abc.def.hij".replaceAll("\\..*", "");
输出:
abc
【讨论】:
在 java.lang.String 中,您会获得一些方法,例如 indexOf(): 它会返回字符/字符串的第一个索引。 和 lstIndexOf: 返回 String/char 的最后一个索引
来自 Java 文档:
public int indexOf(int ch)
public int indexOf(String str)
返回此字符串中第一次出现指定字符的索引。
【讨论】:
这里的代码从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;
}
【讨论】:
public void getStrings() {
String params = "abc.def.ghi";
String s1, s2, s3;
s1 = params.substring(0, params.indexOf("."));
params = params.substring(params.indexOf(".") + 1);
s2 = params.substring(0, params.indexOf("."));
params = params.substring(params.indexOf(".") + 1, params.length());
s3 = params;
}
解决方案
s1="abc" s2="定义" s3="ghi"
如果您有 超过 3 个 String ,那么它看起来 与 s2 完全一样
【讨论】:
private String getTextBefore(final String wholeString, String before){
final int indexOf = wholeString.indexOf(before);
if(indexOf != -1){
return wholeString.substring(0, indexOf);
}
return wholeString;
}
【讨论】:
我试过这样的,
String str = "abc.def.ghi";
String strBeforeFirstDot = str.substring(0, str.indexOf('.'));
// strBeforeFirstDot = "abc"
我尝试在我的示例中提取@登录电子邮件之前的所有字符以提取并提供用户名。
【讨论】: