我正在尝试使用 Groovy 重命名目录中的文件,但我似乎无法理解它是如何工作的。
这是我的脚本:
import groovy.io.FileType
def dir = new File("C:/Users/????/Downloads/Busta_Rhymes-Genesis-(Retail)-2001-HHI")
def replace = {
if (it == '_') {
' '
}
}
String empty = ""
dir.eachFile (FileType.FILES) { file ->
String newName = file.name
newName = newName.replaceAll(~/Busta_Rhymes/, "$empty")
newName = newName.replaceAll(~/feat/, "ft")
newName = newName.replaceAll(~/-HHI/, "$empty")
newName = newName.replaceAll(~/--/, "-")
newName = newName.collectReplacements(replace)
file.renameTo newName
println file.name
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,文件的名称没有按预期更改。我想知道我怎么能让这个工作。
我有一个像这样的字符串:
word = 'python'
Run Code Online (Sandbox Code Playgroud)
基于string.ascii_lowercase,我想创建一个新数组,如下所示:
[15, 24, 19, 7, 14, 13]
Run Code Online (Sandbox Code Playgroud)
我对这个问题的解决方案是执行以下操作:
alphabet = {char: i for i, char in enumerate(string.ascii_lowercase)}
indices = [alphabet[char] for char in word]
print(indices)
Run Code Online (Sandbox Code Playgroud)
输出:[15, 24, 19, 7, 14, 13]
但我正在寻找一种更有效的方法,而不使用循环。我怎样才能以矢量化的方式做到这一点?
我正试图在我的应用程序中创建这样的东西(取自谷歌文档):
现在,我尝试创建一个TextInputLayout元素并尝试在其周围放置边框,但我无法让它看起来像我发布的图像.
这是我的代码TextInputLayout:
<android.support.design.widget.TextInputLayout
android:id="@+id/shipper_layout"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/text_layout_stroke_normal"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp">
<EditText
android:id="@+id/shipper_field"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
android:background="@null"
android:gravity="top"
android:hint="@string/shipper_field"
android:inputType="textMultiLine"
android:overScrollMode="always"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical" />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
以下是它的外观:(关注之前)
您可以看到边框未按预期更改,并且提示只是最小化
我正在尝试获取一个PDDocument对象并将其传递给其他模块,InputStream而不将文档保存到文件系统.
现在,我读到PDStream并且有点了解这个的目的.因此,我尝试做这样的事情:
PDStream stream = new PDStream(document);
InputStream is = stream.createInputStream();
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将输入流加载到a中时PDDocument,我收到此错误:
Exception in thread "main" java.io.IOException: Error: End-of-File, expected line
at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1111)
at org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:1885)
at org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:1868)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:245)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1098)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:995)
at app.DGDCreator.main(DGDCreator.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:143)
Run Code Online (Sandbox Code Playgroud)
后来我发现结果文件大小为0kb ...
我想收集特定索引下特定数组列表中的所有元素.假设我有这个清单:
def names = ["David", "Arthur", "Tommy", "Jacob"]
Run Code Online (Sandbox Code Playgroud)
我想打印索引2下的所有名字,在这种情况下,将打印"大卫,亚瑟"
现在我可以很容易地使用for循环,甚至是groovy eachWithIndex().问题是我不想遍历所有元素,因为这样做效率不高.而不是那样,我想要跑到特定点.
在groovy中有没有这样做的方法,因为我找不到一个.
提前致谢!