我正在寻找一个有效的(一行)字符串操作代码来实现这一点,可能是正则表达式。 我有一个字符串,例如“Calvin”,我需要将其转换为“/ C / a / l / Calvin”。 即取前三个字符,使用'/'分隔它们,然后附加原始字符串。
这是我提出的代码,它的工作正常,只是寻找一个更好的代码。
String first = StringUtils.substring(prodName, 0, 1);
String second = StringUtils.substring(prodName, 1, 2);
String third = StringUtils.substring(prodName, 2, 3);
String prodPath = path + "/" + first + "/" + second + "/" + third + "/" + prodName + "/" ;
答案 0 :(得分:4)
<?php
namespace App\Http\Controllers;
use App\ListImport;
use Illuminate\Http\Request;
class ListImportController extends Controller
{
public $model = ListImport::class;
public function store(Request $request, ListImport $importList)
{
$request->file('importFile')->move(public_path('storage.crm.data'), $request->file('importFile')->getClientOriginalName());
$importList->importFile = public_path('storage.crm.data') . '/' . $request->file('importFile')->getClientOriginalName();
$importList->save();
}
}
答案 1 :(得分:4)
当内置StringUtils.substring(prodName, 0, 1)
做同样的事情时prodName.substring(0, 1)
有什么意义?
无论如何,假设 prodName
总是至少3个字符长(因为你没有给出预期输出的规则,如果不是),这是最快< / em>方法:
String prodPath = path + '/' +
prodName.charAt(0) + '/' +
prodName.charAt(1) + '/' +
prodName.charAt(2) + '/' +
prodName + '/';
通常,char + char
是整数加法,而不是字符串连接,但由于第一个值是String
,而+
运算符是左关联的,所有+
运算符是字符串连接,而不是数字加法。
答案 2 :(得分:3)
如何使用String.charAt
StringBuilder b = new StringBuilder (path);
b.append ('/').append (prodName.charAt (0))
.append ('/').append(prodName.charAt (1))
.append ('/').append(prodName.charAt (2))
.append ('/').append (prodName).append ('/');
答案 3 :(得分:2)
不要将正则表达式用于这样简单的事情。你可以保存几行,但是你的可读性大大降低了。正则表达式通常需要一些时间来理解它们。
String s = path;
for (int i = 0; i < 3; i++)
s += prodName.substring(i,i+1) + "/";
s += prodName
答案 4 :(得分:1)
您可以使用array_map(function($v){
if (strpos($v, 'Mac') !== false) {
echo 'found';
exit;
}
},$os);
echo "Not found";
MessageFormat.format()
imho我会将其包装起来以便于阅读,
MessageFormat.format("{0}/{1}/{2}/{3}/{4}/", baseDir, name.charAt(0), name.charAt(1), name.charAt(2), name);
答案 5 :(得分:0)
不使用正则表达式,而是使用简单的拆分=)
String[] firstThree = prodName.split("");
String prodPath = path + "/" + firstThree[0] + "/" + firstThree[1] + "/" + firstThree[2] + "/" + prodName + "/";
另一种方法是使用charAt()
:
String prodPath = path + "/" + prodName.charAt(0) + "/" + prodName.charAt(1) + "/"+ prodName.charAt(2) + "/" + prodName + "/";
答案 6 :(得分:0)
可以使用正面向前看
public static void main(String[] args) {
String s = "Calvin";
System.out.println(s.replaceAll("(?=^(\\w)(\\w)(\\w))", "/$1/$2/$3/"));
}
O / P:
/C/a/l/Calvin
答案 7 :(得分:0)
您可以使用String Builder:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 3; i++) {
sb.append("/").append(prodName.charAt(i));
}
sb.append('/').append(prodName);
或者您可以将所有代码放在循环中:
int size = 2;
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= size; i++) {
if (i == 0)
sb.append('/');
sb.append(prodName.charAt(i)).append("/");
if (i == size)
sb.append(prodName);
}
答案 8 :(得分:0)
你说高效但你可能意味着简洁。我怀疑要么是一个目标,所以你有一个不同的问题。
为什么你关心这个字符串转换需要四行代码?您是否担心在您的脑海中是一个操作(“创建转换后的字符串”)的东西分布在四个Java操作中?您应该将四行Java提取到自己的方法中。然后,当您读取需要操作的代码时,您有一个与一个Java操作相对应的概念操作(“创建转换的字符串”)(调用方法)。您可以调用methid createTransformedString
来使代码更清晰。