更好的字符串操作代码

时间:2016-06-02 06:49:21

标签: java

我正在寻找一个有效的(一行)字符串操作代码来实现这一点,可能是正则表达式。 我有一个字符串,例如“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 + "/" ;

9 个答案:

答案 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来使代码更清晰。